21

高さと幅の両方でfill_parentとしてxmlで定義されている線形レイアウトの幅と高さを取得するにはどうすればよいですか? 測定方法を試しましたが、正確な値が得られない理由がわかりません。oncreate メソッドが終了する前に、アクティビティでこれらの値が必要です。

4

5 に答える 5

37

LinearLayoutXML で定義された幅を取得する必要があるとします。XMLで参照を取得する必要があります。インスタンスとして定義LinearLayout lします。

 l = (LinearLayout)findviewbyid(R.id.l1);
ViewTreeObserver observer = l.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {

            @Override
            public void onGlobalLayout() {
                // TODO Auto-generated method stub
                init();
            l.getViewTreeObserver().removeGlobalOnLayoutListener(
                    this);
        }
    });

protected void init() {
        int a= l.getHeight();
            int b = l.getWidth();
Toast.makeText(getActivity,""+a+" "+b,3000).show();
    } 
    callfragment();
}  
于 2012-08-31T09:15:54.200 に答える
5

幅と高さの値は、レイアウトが作成された後に設定され、要素が配置されると測定されます。onSizeChanged への最初の呼び出しでは、parms は 0 になるため、そのチェックを使用する場合。

詳細はこちら https://groups.google.com/forum/?fromgroups=#!topic/android-developers/nNEp6xBnPiw

そしてここhttp://developer.android.com/reference/android/view/View.html#Layout

onLayout の使用方法は次のとおりです。

@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
    int width = someView.getWidth();
    int height = someView.getHeight();
}
于 2012-08-22T08:48:47.057 に答える