gpt4 book ai didi

Android:仅获取根布局的屏幕尺寸

转载 作者:搜寻专家 更新时间:2023-11-01 09:10:11 25 4
gpt4 key购买 nike

请让我正确地过来:

我想在 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%),对于任何密度 o 都是相同的。

最佳答案

解决方案:

在我的 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; 中减去它后,我得到了所需的屏幕高度。

优点是此代码适用于所有密度。

希望这对其他人也有帮助。

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

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

欢迎提出任何改进建议。

关于Android:仅获取根布局的屏幕尺寸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8784616/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com