强制所有布局在超大屏幕上显示最大面积

时间:2019-07-05 08:24:37

标签: android

我有一个伪旧版Android应用,具有数百种布局,可在7英寸屏幕上正常显示。但是,我也想在非常大的屏幕(10英寸以上)上运行它,但是系统会扩展所有布局以填充剩余的空间。我真的很想能够为这些大屏幕定义一个最大的区域,并且只用黑色边框填充其余区域即可。

我想要的显然与在真正的旧Android设备中存在的screen compatibility mode上的行为完全相同:

  

在Android 1.6到3.1版本上,系统会在   “邮票”窗口。它模拟具有320dp x 480dp屏幕   黑色边框填充屏幕的其余区域。

但是,如今的系统是:

  

在Android 3.2及更高版本上,系统会像在   然后将320dp x 480dp屏幕放大到整个屏幕。

我只是不想扩大规模。有什么想法无需编辑每个布局吗? (而且不必为每个布局都提供res/layout-large/版本)。

2 个答案:

答案 0 :(得分:0)

我还没有实际使用过它。但是您可以尝试的方法很少:

1。声明最大宽高比

您可以为整个应用或特定活动定义android:resizeableActivity 。对于Android 7.1(API级别25)或更低版本,以及Android 8.0(API级别26)或更高版本,行为几乎没有什么不同。对于Android 8.0(API级别26)及更高版本,您可以在Activity标签中定义android:MaxAspectRatio,对于Android 7.1及更低版本,您可以在Application标签中定义android.max_aspect。这样,当您的应用在宽高比大于您指定的宽高比的设备上运行时,您的应用将被加标题。

2。声明最大屏幕尺寸

您可以通过在清单标记中指定maximumWidthLimitDp属性来禁用超过特定宽度的大小调整。然后,Android不再调整布局大小,而是启用屏幕兼容模式,该模式以应用支持的最大尺寸绘制布局,然后按比例放大所有像素以填充屏幕。

您可以阅读有关Screen Distributions

的更多信息

我希望这会有所帮助:)

答案 1 :(得分:0)

这需要更多的逻辑和工作,但是您可以这样做:

  • 将布局包含在父布局/自定​​义视图中。
  • 默认情况下,父级布局会根据屏幕密度或宽度/高度匹配您所需的尺寸
  • 自定义视图将扩展例如FrameLayout并查找一个标志,该标志将大小调整限制为大屏幕设备上的中心块或希望支持的设备上的全屏。

希望这会有所帮助。

==== 更新: 覆盖SetContentView函数,并在其中添加逻辑-如果屏幕尺寸较大,则可以使用一个容器将布局限制在中心正方形内,或者像往常一样直接使用代码调用super。