内容视图宽度和高度

时间:2012-10-10 22:50:26

标签: android window height width

我正在使用以下步骤来了解我的显示屏幕上的contentview的宽度和高度

ContentViewWidth = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getWidth();
ContentViewHeight = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getHeight();

但是这个方法在onCreate或onResume中不起作用,如果我在onWindowFocusChanged中使用这些步骤,我的手机上会出现强制关闭错误

请帮助我如何获取显示屏的内容视图。内容视图不包含状态栏和标题栏维度

3 个答案:

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