我正在使用以下步骤来了解我的显示屏幕上的contentview的宽度和高度
ContentViewWidth = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getWidth();
ContentViewHeight = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getHeight();
但是这个方法在onCreate或onResume中不起作用,如果我在onWindowFocusChanged中使用这些步骤,我的手机上会出现强制关闭错误
请帮助我如何获取显示屏的内容视图。内容视图不包含状态栏和标题栏维度
答案 0 :(得分:1)
我使用以下技术 - 发布将在创建视图时执行的onCreate()
的runnable:
contentView = findViewById(android.R.id.content);
contentView.post(new Runnable()
{
public void run()
{
contentHeight = contentView.getHeight();
}
});
此代码将在onCreate()
完成后在主UI线程上运行。
如果您尝试获取内容视图本身的高度,则需要从高度中减去填充 - 这是因为Android 2.x以不同于4.x的方式布局视图。
contentHeight = contentView.getHeight() - contentView.getTopPadding();
答案 1 :(得分:0)
以下是我在活动中所做的事情,以确定我知道在屏幕上端到端延伸的特定视图子项的内容布局(在本例中为webview):
首先,继承自OnGlobalLayoutListener:
public class ContainerActivity extends Activity implements ViewTreeObserver.OnGlobalLayoutListener {
...
接下来,实现监听器接口的onGlobalLayout方法(注意我做了一些与计算中等缩放倾角有关的像素计算:
@Override
public void onGlobalLayout() {
int nH = this.mWebView.getHeight();
int nW = this.mWebView.getWidth();
if (nH > 0 && nW > 0)
{
DisplayMetrics oMetrics = new DisplayMetrics();
this.getWindowManager().getDefaultDisplay().getMetrics(oMetrics);
nH = (nH * DisplayMetrics.DENSITY_DEFAULT) / oMetrics.densityDpi;
nW = (nW * DisplayMetrics.DENSITY_DEFAULT) / oMetrics.densityDpi;
// do something with nH and nW
this.mWebView.getViewTreeObserver().removeGlobalOnLayoutListener
( this
);
...
}
}
最后,确保在onCreate()内告诉你正在听布局事件的视图元素(本例中为mWebView):
this.setContentView(this.mWebView = new WebView(this));
this.mWebView.getViewTreeObserver().addOnGlobalLayoutListener
( this
);
此方法适用于较旧的Android版本。我相信ics +为你可以绑定的每个视图都有一个布局监听器,因此会以类似的方式使用。
答案 2 :(得分:0)
Rect rectangle = new Rect();
Window window = getWindow();
window.getDecorView().getWindowVisibleDisplayFrame(rectangle);
int contentHeight = window.findViewById(Window.ID_ANDROID_CONTENT).getHeight();
int contentWidth = window.findViewById(Window.ID_ANDROID_CONTENT).getWidth();