contentView为宽度和高度返回0

时间:2013-11-29 02:49:11

标签: android user-interface

此代码用于显示contentview的宽度和高度,代码在onCreate()方法中调用setContentView()方法后运行,但结果是宽度为零,高度为零。但是,内容视图在屏幕上打开,宽度或高度都不为0。这里有什么问题以及如何显示contentview的宽度和高度?

contentview对象不为null,我使用toString()语句来检查它。

如果这不好,那么有更好的方法来获取pixles的contentView的高度和宽度吗?

   ViewGroup contentViewObj;
  View v;

  ...

@Override
    public void onContentChanged() {
        // TODO Auto-generated method stub
        super.onContentChanged();

        //v = (ViewGroup) getWindow().getDecorView().findViewById(android.R.id.content);
        v = (View) getWindow().getDecorView().findViewById(android.R.id.content);

             Toast.makeText(MainActivity.this, "width of contentview " + v.getWidth()
                     + " " + "height of contentView " + v.getHeight(), Toast.LENGTH_SHORT).show();
    } 

2 个答案:

答案 0 :(得分:1)

你需要等待视图完全形成/打开,然后你会得到这些值。目前发生的是你的视图正在形成所以它就是为什么它来了0.你需要放一些计时器或处理程序这样代码将在视图形成后的2,3秒后运行

答案 1 :(得分:1)

获得0的原因是因为尚未测量视图。要获得布局的大小,您应该使用getWidth()getMeasuredWidth()方法。但是,在测量视图之前,这些方法不会给您有意义的答案。在这里阅读how android draws views

您可以将onWindowFocusChanged()改为mentioned in this thread来获得正确的尺寸。

或者,你可以这样做:

@Override
public void onContentChanged() {
    super.onContentChanged();

    v = (View) getWindow().getDecorView().findViewById(android.R.id.content);

    v.post(new Runnable() {
        @Override
        public void run() {
            Toast.makeText(MainActivity.this, "width of contentview " + v.getWidth()
                    + " " + "height of contentView " + v.getHeight(), Toast.LENGTH_SHORT).show();
        }
    });
}