2015-02-23 127 views
0

我有一个FrameLayout里的,当我试图得到它的PARAMS这样的:获取宽度和高度的布局

ViewGroup.LayoutParams params = cameraPreviewFrameLayout.getLayoutParams(); 
int layoutHeight = params.height; 
int layoutWidth = params.width; 

这里,layoutHeight是-2,layoutWidth为-1。这是我的XML:

<FrameLayout 
    android:id="@+id/liveActivity_cameraPreviewFrameLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_centerInParent="true"/> 

我执行从的onCreate这个动作,而且我通过在onStart()试图给它,同样的结果。显然这个布局的高度和宽度不是这些值。

如何有效检索布局的大小?

回答

1

返回的值是正确的,因为:

-2 stands for LayoutParams.WRAP_CONENT 
-1 stands for LayoutParams.MATCH_PARENT 

如果你想获得精确值,你需要使用的方法的getHeight和的getWidth。然而这些方法只能使用一次的布局已经测得,所以耽误您的通话是这样的:

cameraPreviewFrameLayout.post(new Runnable() { 
    @Override 
    public void run() { 
     View v = cameraPreviewFrameLayout; 
     Log.e("TAG", v.getWidth() + ":" + v.getHeight()); 
    } 
}); 
1

有道后或内onLayoutChange方法调用越来越布局的大小

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    final FrameLayout layout = (FrameLayout) findViewById(R.id.liveActivity_cameraPreviewFrameLayout); 
    layout.addOnLayoutChangeListener(new View.OnLayoutChangeListener() { 
     @Override 
     public void onLayoutChange(View v, int left, int top, int right, int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
      int width = right - left; 
      int height = bottom - top; 
      Log.v("TAG", String.format("%d - %d", width, height)); 
      //Or 
      Log.v("TAG", String.format("%d - %d", layout.getWidth(), layout.getHeight())); 
      //And after this method call, calling layout.getWidth() and layout.getHeight() will give right values 
     } 
    }); 
} 
+0

这种运作良好。 – svprdga 2015-02-24 10:17:50