Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中找到可用的显示分辨率?_Android_Android Layout_Screen Resolution - Fatal编程技术网

如何在Android中找到可用的显示分辨率?

如何在Android中找到可用的显示分辨率?,android,android-layout,screen-resolution,Android,Android Layout,Screen Resolution,假设我们有一个Android应用程序,它希望完全管理显示区域,因此它可以调整其子控件的大小(在运行时,没有XML-我们需要动态地主动修改子控件的大小) 该应用程序将只运行在横向方向,没有键盘输入,因此我们不希望可用区域发生任何变化 我们将显示的内容的大小将基于此可用区域进行计算。例如,一个项目正好占据可用区域的左半部分,右半部分将按严格的比例分配给其他项目。甚至字体大小也会被调整,以使它们正确地适合项目 我最初的想法是为main.xml提供一个网格布局,没有内容,但配置为扩展到最大大小(使用fi

假设我们有一个Android应用程序,它希望完全管理显示区域,因此它可以调整其子控件的大小(在运行时,没有XML-我们需要动态地主动修改子控件的大小)

该应用程序将只运行在横向方向,没有键盘输入,因此我们不希望可用区域发生任何变化

我们将显示的内容的大小将基于此可用区域进行计算。例如,一个项目正好占据可用区域的左半部分,右半部分将按严格的比例分配给其他项目。甚至字体大小也会被调整,以使它们正确地适合项目

我最初的想法是为main.xml提供一个网格布局,没有内容,但配置为扩展到最大大小(使用
fill\u parent
或类似的东西)。我们将使用网格布局来定位对象,但我们对大小的控制将决定布局管理器如何显示对象

希望我们可以在适当的时间(初始化之后,绘制之前)查询网格布局,以获得分辨率,然后根据该分辨率调整所有未来的绘制

有更好的方法吗?我意识到XML意味着将内容与表示分离,但这个特定的客户机希望完全控制布局,并在必要时限制代码可以运行的设备(这是一个内部应用程序,因此他们可以指定)


我的另一个想法是在XML中添加所有具有虚假大小的子控件(所有内容都将始终存在,只是大小可能会改变)。但是,这样做,我不确定我是否会失去获取可用区域的能力,从而智能地调整大小。

您是否混淆了
分辨率
密度
。什么是“可用显示分辨率”?。每个设备只有一个像素分辨率:

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);

final int height = dm.heightPixels;
final int width = dm.widthPixels;
但显示内容取决于受密度和显示大小影响的分辨率

(更新)

(1) 要查看全屏模式下的开始并隐藏所有标题栏或通知栏,请执行以下操作:

    // Remove title bar
    this.requestWindowFeature(Window.FEATURE_NO_TITLE);
    // Remove notification bar
    this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
            WindowManager.LayoutParams.FLAG_FULLSCREEN);
(2) 要获取视图矩形,请执行以下操作:

    Rect rect = new Rect();
    Window window = getWindow();
    window.getDecorView().getWindowVisibleDisplayFrame(rect);
    int statusBarHeight = rect.top;
    int contentViewTop = window.findViewById(Window.ID_ANDROID_CONTENT).getTop();
    int titleBarHeight = contentViewTop - statusBarHeight;

我可以使用任何测量(物理像素或DPs),但我不想要屏幕大小,我想要应用程序的可用大小。换句话说,即使我的Iconia可能是1280x800,但底部的“导航”栏的部分空间被Android窃取(我不确定是否也有从顶部窃取的内容)。请参见示例:-我需要了解的是,如果底部没有导航栏,显示器有多宽和多高(带back、home、applist、clock、wifi和电池指示器)。实际上,这正是我需要的。标题栏可以打开,我不需要,但我可能想保留通知栏。只需一个问题,第二个代码示例的类是什么(即,调用的getWindow()是什么)?视图本身没有getWindow()。
((活动)getContext()).getWindow()
从视图