处理略有不同的纵向和横向布局的单个 Android 布局 xml 文件?

Posted

技术标签:

【中文标题】处理略有不同的纵向和横向布局的单个 Android 布局 xml 文件?【英文标题】:A single Android layout xml file that handles slightly different portrait and landscape layouts? 【发布时间】:2016-10-12 00:36:14 【问题描述】:

我知道,如果您想要纵向和横向的不同布局,您可以为每个方向设置不同的 xml 文件。

如果更改非常小,并且您不希望每次设计更改时都必须维护 2 组布局文件,该怎么办?有没有办法在单个布局xml文件中说:

如果(纵向)...

否则...

【问题讨论】:

好吧,您可以在方向变化(例如尺寸)上获得不同的值。或者您可以务实地进行操作,以便在修改布局时进行旋转。 您可以将布局的不同组件分成单独的布局(使用include),并且您将拥有相同布局的两个版本(纵向和横向),仅用于其中很小的一部分用户界面。 正如@mbmc 指出的那样,您不需要覆盖整个布局。使用include,您只能提取 1 个视图来重新定义 【参考方案1】:

取决于更改...有时做一个新布局比以编程方式做所有事情要好,但如果是的话,你可以这样做

if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) 
        //do the code

else
        //do the code

【讨论】:

【参考方案2】:

如果您想以编程方式而不是几个 xml 布局来处理更改,您可以使用一对布尔属性,让您在运行时查询您是纵向还是横向。

例如在值\dimens.xml

<bool name="is_landscape">false</bool>

在 values-land\dimens.xml 中

<bool name="is_landscape">true</bool>

然后你可以在运行时查询这个:

boolean isLandscape = getResources().getBoolean(R.bool.is_landscape);

【讨论】:

你能在另一个 xml 文件中使用那个 is_landscape 属性吗?这就是我想做的事 它应该可以在 values 或 values-land 文件夹中的任何 xml 文件中正常工作。 我觉得这可能会有所帮助,但是如何在布局文件中检查是否设置了此标志,并根据它是真还是假来更改布局? 不,您将无法基于 xml 中的特定变量执行任何逻辑,但可以为纵向和横向创建不同的样式,允许您将某些 UI 元素设置为可见或消失。要使用 is_landscape 属性,您需要找到所有视图并在代码中而不是在 xml 中设置它们的属性。

以上是关于处理略有不同的纵向和横向布局的单个 Android 布局 xml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

Android小部件不同的纵向和横向方向

Android 纵向和横向布局

如何在颤动中显示横向和纵向的不同布局

播放 VideoView 的不同纵向和横向布局

为纵向和横向指定不同的布局?

如何使用自动布局为纵向和横向方向配置不同的布局?