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