根据显示方向更改XML填充属性

时间:2017-10-16 22:05:39

标签: android xml

在我的XML布局中,我尝试根据显示方向在LinearLayout上设置不同的paddingTop。

上面的代码适用于纵向模式,但在横向模式下我想要,例如,android:paddingTop="20dp"

   <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:paddingStart="5dp"
        android:paddingEnd="0dp"
        android:paddingTop="60dp"
        android:orientation="vertical">

        <TextView></TextView>
        <TextView></TextView>

   </LinearLayout>

可以从XML或需要我以编程方式管理屏幕方向更改吗?

谢谢。

1 个答案:

答案 0 :(得分:1)

使用xml执行此操作时有两种选择。为纵向/横向指定不同的布局文件或使用单个布局文件并为纵向/横向定义不同的尺寸。

不同的布局文件

如果您在纵向/横向中具有明显不同的布局,则实际上只需使用不同的布局。随着应用程序规模的扩大,维护不同的布局会更加困难。在res文件夹中,您需要创建两个子文件夹:

res/layout-port

res/layout-land

然后,您将在每个文件夹中创建一个具有相同名称的文件。当设备处于纵向状态时,将使用layout-port中的文件;当使用layout-land中的文件时,将使用该文件。

不同的维度文件

第二个选项是使用一个布局文件,但在其中定义动态尺寸。首先,您需要在res文件夹中创建两个文件夹:

res/values-port
res/values-land

然后,您需要在每个文件夹中创建一个名为dimens.xml的文件。在values-port文件夹中,您可以将其设置为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="main_screen_padding_top">60dp</dimen>
</resources>

并在values-land文件夹中将其设置为:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="main_screen_padding_top">20dp</dimen>
</resources>

然后在布局xml文件中,您可以引用该维度值:

<LinearLayout
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="1"
    android:paddingStart="5dp"
    android:paddingEnd="0dp"
    android:paddingTop="@dimen/main_screen_padding_top"
    android:orientation="vertical">

    <TextView></TextView>
    <TextView></TextView>

</LinearLayout>

它将使用适当的尺寸,具体取决于设备的方向。

出于您的目的,我建议使用尺寸方法,因为它通常更容易维护。