3

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

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

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

请帮助我如何获得显示屏的内容视图。内容视图不包括状态栏和标题栏尺寸

4

3 回答 3

1

我使用以下技术 - 发布一个可运行的onCreate(),将在创建视图时执行:

    contentView = findViewById(android.R.id.content);
    contentView.post(new Runnable()
    {
        public void run()
        {
            contentHeight = contentView.getHeight();
        }
    });

完成后,此代码将在主 UI 线程上运行onCreate()


如果您尝试获取内容视图本身的高度,则需要从高度中减去填充 - 这是因为 Android 2.x 对视图的布局与 4.x 不同。

contentHeight = contentView.getHeight() - contentView.getTopPadding();
于 2014-01-29T08:45:55.780 回答
0

这是我在我的活动中所做的,以找出我知道在屏幕上端到端拉伸的特定视图子的内容布局(在这种情况下是 web 视图):

首先,继承自 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+ 为您可以绑定到的每个视图都有一个布局侦听器,因此,将以类似的方式使用。

于 2012-10-11T01:34:18.197 回答
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();
于 2016-08-04T10:42:13.287 回答