2016-12-15 16 views
0

私は毎回レイアウトの高さを受け取りたいですが、今度はforループが完了したらレイアウトの高さを取得します。誰もがforループで毎回高さを受け取る方法を知っていますか?forループのgetViewTreeObserverが機能しない、なぜですか?

for (int i = 0; i < deelnemers.size(); i++) { 

     inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View informatie = inflater.inflate(R.layout.modeldeelnemer, null); 

     TextView volgNummer = (TextView) informatie.findViewById(R.id.volgnummer); 

     volgNummer.setText("Nummer: " + deelnemers.get(i).getVolgnummer() + " /"); 
     lLayout.addView(informatie); 

     lLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { 
      public void onGlobalLayout() { 
       lLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this); 

       int height = lLayout.getMeasuredHeight(); 
       int width = lLayout.getMeasuredWidth(); 
      } 
     }); 
    } 

答えて

1

通常、悪い習慣であるグローバルレイアウトリスナーを使用しないでください。最後には、ビューが測定されたときを知りたいので、そのイベントをフックします。私は、OnMeasure呼び出しを観察するコールバック付きの小さなレイアウトを書いた。このレイアウトを確認してください:あなたはMeasureCallbackを追加し、実際のサイズとやりたいことができますあなたのリニアレイアウトの周りにそのレイアウトをラップMeasureCallbackLayout

measureCallbackLayout.addMeasureListener(new MeasureCallbackLayout.MeasureCallback() { 
    @Override 
    public void onMeasured() { 
     int height = lLayout.getMeasuredHeight(); 
     int width = lLayout.getMeasuredWidth(); 
    } 
}); 
関連する問題