我有RelativeLayout
这里是代码:
<RelativeLayout
android:id="@+id/camerapreview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="10dp"
android:background="#000">
</RelativeLayout>
是相机应用程序的相机预览,我将width
设置为match_parent
。
这是我的java代码:
RelativeLayout preview = (RelativeLayout) findViewById(R.id.camerapreview);
int w = preview.getWidth();
LayoutParams params = preview.getLayoutParams();
params.width = w;
params.height = w;
preview.addView(mPreview);
基本上我将RelativeLayout
到match_parent
的宽度变为动态到任何设备的宽度。但我希望视图是方形的,所以我使用了java code
abave,但每次运行程序时,这一行int w = preview.getWidth();
都返回零。我一定错过了什么,请帮忙:D谢谢你。
答案 0 :(得分:3)
在计算其父级之前,无法计算视图的大小,您可以使用以下代码强制执行该操作:
view.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
int widht = view.getMeasuredWidth();
int height = view.getMeasuredHeight();
有三种方法,请参阅此link
修改强>
你也可以使用它。
RelativeLayout layout = (RelativeLayout) findViewById(R.id.camerapreview);
ViewTreeObserver vto = layout.getViewTreeObserver();
vto.addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
hs.getViewTreeObserver().removeGlobalOnLayoutListener(this);
int width = layout.getMeasuredWidth();
int height = layout.getMeasuredHeight();
}
});
答案 1 :(得分:3)
这可能对你有帮助......
RelativeLayout preview = (RelativeLayout) findViewById(R.id.camerapreview);
int width = getResources().getDisplayMetrics().widthPixels;
ViewGroup.LayoutParams params = preview.getLayoutParams();
params.width = width;
params.height = width;
preview.setLayoutParams(params);
此处preview
将占据整个屏幕宽度......并且它将是方形的......
答案 2 :(得分:1)
布局的宽度为“匹配父级”。因此,如果它没有视图(是空的)宽度= 0
解决方案:
添加视图到布局
或者将宽度设置为“填充父级”