Android:仅获取根布局的屏幕大小

请让我在这里正确:

我想在onCreate()方法中获取Activity / Layout可用空间的高度/宽度,以计算可以赋予子布局的高度。 我可以使用以下屏幕尺寸:

      root = (LinearLayout) findViewById(R.id.mainroot); // Main layout of LinearLayout  

       android.view.Display display = getWindowManager().getDefaultDisplay();
    int height = Display.getHeight(); // I know this is deprecated have hence used 
      int width = Display.getWidth(); // DisplayMetrics
    int childWidth, childHeight;

    DisplayMetrics metrics = new DisplayMetrics();
    display.getMetrics(metrics);
    //int density = metrics.densityDpi;
    height = metrics.heightPixels;  //480
    width = metrics.widthPixels;    //320

这两种方法/方式给我相同的高度和宽度,即全屏大小。 我正在寻找的是在扣除应用标题,状态栏等之后获得布局的实际高度。

任何想法如何得到这个。 或者获得标题的大小等 - 这里应该统计所有的东西。 在模拟器上,我看到顶部有2个条 - 1必须是应用程序标题什么是另一个。 我可以获得所有的高度,并从屏幕高度中扣除。

还有一点:在这种情况下,我将按照程序设置高度,因此它将以像素为基础(因为我只能以像素为单位设置像素高度)会影响密度因子,屏幕大小不同。 什么可以是一种方式来计算高度(让说50%)的儿童布局,将任何密度相同的所以。


解答:

在我的onCreate()中,我添加了以下几行:

    setContentView(R.layout.mainpage);

    root = (LinearLayout) findViewById(R.id.mainroot);    
    root.post(new Runnable() {
        public void run() {
            Rect rect = new Rect();
            Window win = getWindow();
            win.getDecorView().getWindowVisibleDisplayFrame(rect);
            int statusHeight = rect.top;
            int contentViewTop = win.findViewById(Window.ID_ANDROID_CONTENT).getTop();
            titleHeight = contentViewTop - statusHeight;
            Log.i(Utility.TAG, "titleHeight = " + titleHeight + " statusHeight = " + statusHeight + " contentViewTop = " + contentViewTop);

            // CALCULATE THE SIZE OF INNER LAYOUTS
            calculateChildSize();
        }
    });

通过上面的代码,我得到了titleBar&statusBar的值。 从metrics.heightPixels;扣除metrics.heightPixels; 我获得了屏幕所需的高度。

好点是这个代码适用于所有密度。

希望这也能帮助其他人。

为了改进:我必须为我的应用程序中的所有活动执行类似的计算,因此只考虑编写一次代码。 我可以将titleHeight保存为静态变量,以便在所有活动中使用。 但

用户可以在运行时更改手机的密度吗? 如果是这样,那么Activity的onCreate会再次被调用吗? 如果没有,那么我可以捕捉密度变化事件,我可以添加此代码并使当前活动更新。

任何想法改善建议,赞赏。


//其中rootView是应用程序根视图的对象final int viewWidt = rootView.getMeasuredWidth();

链接地址: http://www.djcxy.com/p/90657.html

上一篇: Android: Get Screen size for the root Layout only

下一篇: Assign width to half available screen width declaratively