2016-06-17 5 views
0

Я пишу несколько кодов, подобных ниже, в моем пользовательском представлении.Когда будет обновлено представление после заданного параметра макета в Android

RelativeLayout.LayoutParams lp = (RelativeLayout.LayoutParams) getLayoutParams(); 
lp.setMargins(100, 100, 0 ,0); 
lp.width = 200; 
lp.height = 200; 

Я использую точку прерывания в последней строке и найденное значение getX() по-прежнему 0 в окне выражения выражения.

Я хочу знать, когда будет обновлять значение GetX() после параметра набора макета, он должен быть 100.

Спасибо.

+1

Вы установили его в какое-то представление, например button1 .setLayoutParams (PARAMS); –

+0

Да, я поставил, но я попробовал либо setLayoutParams, либо нет. – aiueoH

ответ

2

Когда вы установите LayoutParams для дочернего представления, его родитель будет снова выполнять фазу фазы и макета.

Ваш код setLayoutParams() будет добавлен в MessageQueue для выполнения. Вы используете точку останова здесь ничего не увидите.

Чтобы получить новый LayoutParams, вы должны отправить сообщение как этот

yourView.post(new Runnable() { 
      @Override 
      public void run() { 
       v.getX(); 
      } 
     }); 

Другой способ:

yourView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      @Override 
      public void onGlobalLayout() { 
       // get your view size here 
      } 
     }); 

Если вы хотите увидеть, когда обновить ваш взгляд это LayoutParams, вставить войти в layout() метод из вашей страны Вид

@Override 
public void layout(int l, int t, int r, int b) { 
    Log.d("alex.hong", "before X = " + getX()); 

    super.layout(l, t, r, b); 

    Log.d("alex.hong", "current X = " + getX()); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^