处理略有不同的纵向和横向布局的单个 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 文件?的主要内容,如果未能解决你的问题,请参考以下文章