此代码用于显示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();
}
答案 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();
}
});
}