2013-11-29 126 views
1

此代码用于显示contentview的宽度和高度,代码在onCreate()方法中调用setContentView()方法之后运行,但它的结果宽度为零和零高度。但是,contentview在屏幕上打开,并且对于宽度或高度都不为0。这里出现了什么问题,以及如何显示contentview的宽度和高度?contentView返回0的宽度和高度

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

如果这不好,那么有没有更好的方式来获得像素的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(); 
    } 

回答

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

你需要等待,以便形成/完全开放,那么你将得到这些values.Currently发生的事情是,你的观点是目前形成所以这就是为什么它是未来0。你需要把一些定时器或处理程序,以便此代码将在您的视图形成后2,3秒后运行

相关问题