1

ビューの子としてコントロールを追加するパブリック関数を持つカスタム ビューがあり、それを自分のアクティビティから呼び出したいと考えています。問題は、コントロールを配置するために関数内のビューのサイズを知る必要があることです。私のビューは、この関数が final である別のカスタム ビューから継承しているため、メジャーを取得するために onMeasure をオーバーライドすることはできません。私は measureChildren をオーバーライドしようとしましたが、呼び出されるのが遅すぎます (ビューが配置されているアクティビティの onResume の後でも)。アクティビティがビュー内の関数を呼び出す前にサイズを取得するにはどうすればよいですか?

4

2 に答える 2

0

1つの可能性は、アクティビティでビューを測定し、使用する内部メソッドのビューのプロパティを設定することです。

グローバルレイアウトリスナーを使用することは、私にとって常にうまく機能してきました。レイアウトが変更された場合、たとえば、何かがView.GONEに設定されている場合、または子ビューが追加/削除された場合に、物事を再測定できるという利点があります。

public void onCreate(Bundle savedInstanceState)
{
     super.onCreate(savedInstanceState);

     // inflate your main layout here (use RelativeLayout or whatever your root ViewGroup type is
     LinearLayout mainLayout = (LinearLayout ) this.getLayoutInflater().inflate(R.layout.main, null); 

     // set a global layout listener which will be called when the layout pass is completed and the view is drawn
     mainLayout.getViewTreeObserver().addOnGlobalLayoutListener(
     new ViewTreeObserver.OnGlobalLayoutListener() {
          public void onGlobalLayout() {
               // at this point, the UI is fully displayed
          }
     }
 );

 setContentView(mainLayout);

http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html

于 2012-12-08T16:45:43.803 に答える
0

表示サイズをピクセル単位で取得したい場合は、getSize を使用できます。

Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
于 2012-12-08T16:28:43.210 に答える