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

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

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

如果(纵向)...

否则...

【问题讨论】:

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

标签: android xml android-layout


【解决方案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 中设置它们的属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-21
    • 2019-04-03
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多