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