【问题标题】:Layout params getWidth() returns zero布局参数 getWidth() 返回零
【发布时间】:2014-01-04 15:19:44
【问题描述】:

我有一个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 谢谢。

【问题讨论】:

  • 你在哪里写这段代码?是 onCreate() 吗?
  • 是的 @GopalRao 它在 onCreate()

标签: android xml width layoutparams


【解决方案1】:

这可能对你有帮助...

    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】:

在计算其父级之前无法计算视图的大小,您可以使用以下代码强制执行该操作:

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(); 

    } 
});

【讨论】:

  • RelativeLayout preview = (RelativeLayout) findViewById(R.id.camerapreview); preview.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED); int width = preview.getMeasuredWidth(); LayoutParams 参数 = preview.getLayoutParams(); params.width = 宽度; params.height = 宽度; preview.addView(mPreview);我做了这个,它仍然为零,我做对了吗?
  • 查看我的编辑@GreenFox,你看到链接了吗?
【解决方案3】:

布局的宽度 'match parent' 。因此,如果它没有视图(为空)宽度 = 0。
解决方案:
将视图添加到布局
或将宽度设置为“填充父级”

【讨论】:

    猜你喜欢
    • 2011-09-02
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    相关资源
    最近更新 更多