获取布局的宽度和高度
Obtain width and height of a Layout
我有一个 FrameLayout,当我尝试像这样获取它的参数时:
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() 执行此操作,结果相同。显然这个布局的高和宽不是这些值。
如何有效地检索布局的大小?
返回的值是正确的,因为:
-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());
}
});
在 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
}
});
}
我有一个 FrameLayout,当我尝试像这样获取它的参数时:
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() 执行此操作,结果相同。显然这个布局的高和宽不是这些值。
如何有效地检索布局的大小?
返回的值是正确的,因为:
-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());
}
});
在 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
}
});
}