布局参数getWidth()返回零

时间:2014-01-04 07:04:21

标签: android xml width layoutparams

我有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);

基本上我将RelativeLayoutmatch_parent的宽度变为动态到任何设备的宽度。但我希望视图是方形的,所以我使用了java code abave,但每次运行程序时,这一行int w = preview.getWidth();都返回零。我一定错过了什么,请帮忙:D谢谢你。

3 个答案:

答案 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 解决方案:
添加视图到布局
或者将宽度设置为“填充父级”