【问题标题】:Force all layouts to have a maximum area on very large screens强制所有布局在超大屏幕上具有最大区域
【发布时间】:2019-07-15 00:48:43
【问题描述】:

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

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

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

但是,现在系统所做的是:

在 Android 3.2 及更高版本上,系统会像在 320dp x 480dp 屏幕,然后将其放大以填满屏幕。

我只是不想扩大规模。无需为此编辑每个布局的任何想法? (显然不必为每个布局提供res/layout-large/ 版本)。

【问题讨论】:

  • 我认为 10" 会在 xlarge 之下。
  • 我从未使用过兼容模式,也不知道它是如何工作的,但您可以尝试在layout-xlarge 中仅提供一个/根布局。为根ViewGroup 设置一个填充,并给它一个黑色背景。 Android应该从相邻文件夹中获取其余布局。
  • Tnx 回答!但是这种方法会迫使我编辑项目中的每一个布局,以使它们都成为该根布局的子级。那将是我最后的选择……

标签: android


【解决方案1】:

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

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

希望这会有所帮助。

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

【讨论】:

  • Tnx 用于回答,但没有帮助。请阅读问题的最后一段。我已经知道如何制作 Android 应用程序,但我试图避免在这种情况下编辑每个布局,以防万一有特殊的鲜为人知的配置。
  • 我的建议不是编辑每个布局 - 这是一个选项,但另一个选项是更改活动中的代码(如果您使用片段)以根据屏幕大小绑定容器。您还可以编辑 setContentView 函数并在其中添加逻辑以保存多个布局编辑...
  • Tnx 和我为您的努力提供赏金!我想框架没有提供直接的解决方案,所以setContentView 覆盖方法可能是一种不那么痛苦的方法(感谢上帝,这个真正的遗留应用程序中的所有活动都有一个通用的自定义父类,虽然......)。
【解决方案2】:

我还没有真正使用过它。但是您可以尝试以下几种方法:

1.声明最大纵横比

您可以为整个应用或特定活动定义android:resizeableActivityfalse。对于 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

我希望这会有所帮助:)

【讨论】:

  • Tnx 回答!但是,我已经尝试了这两个选项,并且系统总是调整布局的大小(如我在原始问题中包含的官方文档的文本中所述,特别是第二个:“[...] 然后将其扩展到填满屏幕”)。这两个选项都可以导致居中布局,在水平边上最多有黑色边距,但我特别要求一些完全不同的东西(最大尺寸都被黑色边框包围)。
猜你喜欢
  • 1970-01-01
  • 2012-10-27
  • 1970-01-01
  • 2020-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多