在安卓中,是否可以在XML中定义随配置变化的常量?

25

我对在Android中使用XML布局实现横屏和竖屏视图(以及其他一些配置)时大小自适应很感兴趣。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:background="@drawable/stream_bg_1px_wide"
android:layout_height="150dip" >
在这个例子中,我只想根据横屏或竖屏不同来改变150dip的大小,而不改变其他任何东西。我正在使用layout和layout-land,我知道我可以在这两个文件夹中重复布局,但这样会使维护其中的更改有些麻烦。当我基于屏幕密度和大小引入更多变量时,情况只会变得更糟。因此,我想知道是否可能在XML文件中定义一个值(常数),并从我的布局中引用它,类似于颜色的定义方式。
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="shopper_background"> #FFFFFF</color>
</resources>

类似于……的

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <value name="footer_size" >150</value>
</resources>

那我只需要在每个配置文件中复制该文件,并使用不同的值。

感谢任何帮助。

3个回答

40

是的,您可以这样做,我们在Android本身的各个地方都在这样做。只需在res/values/、res/values-land/等位置定义常量。对于尺寸,请使用标签以及在布局中使用@dimen/my_value进行引用。


25

可以的。维度是资源文件中可接受的项目。因此,创建例如 res/values/dimension.xml 并放入:

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

2
我将尽量简要地解释。
首先,您可能已经注意到,现在应该使用 ConstraintLayout ,这是谷歌要求的(请参阅andorid库)。
在您的Android Studio项目中,您可以创建额外的res/layout/目录来提供特定于屏幕的布局。每个需要不同布局的屏幕配置都需要一个文件夹。
这意味着在两种情况下都必须使用目录限定符
  • Android设备支持
  • Android横屏或竖屏模式
因此,以下是一个例子:
res/layout/main_activity.xml                # For handsets
res/layout-land/main_activity.xml           # For handsets in landscape
res/layout-sw600dp/main_activity.xml        # For 7” tablets
res/layout-sw600dp-land/main_activity.xml   # For 7” tablets in landscape

你也可以使用 dimens.xml 文件与 res 资源文件一起使用限定符。

res/values/dimens.xml                # For handsets
res/values-land/dimens.xml           # For handsets in landscape
res/values-sw600dp/dimens.xml        # For 7” tablets

res/values/dimens.xml

<resources>
    <dimen name="grid_view_item_height">70dp</dimen>
</resources>

res/values-land/dimens.xml

<resources>
    <dimen name="grid_view_item_height">150dp</dimen>
</resources>

your_item_grid_or_list_layout.xml

<androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/constraintlayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content

    <ImageView
            android:id="@+id/image"
            android:layout_width="0dp"
            android:layout_height="@dimen/grid_view_item_height"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="@drawable/border"
            android:src="@drawable/ic_menu_slideshow">

</androidx.constraintlayout.widget.ConstraintLayout>

来源: https://developer.android.com/training/multiscreen/screensizes

Android 应用程序可以在各种不同大小和分辨率的屏幕上运行。为了确保您的应用程序在所有设备上都能正常工作,您需要考虑多个屏幕尺寸和密度,并相应地设计您的用户界面。您可以使用布局文件和资源文件来管理不同的屏幕尺寸和密度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接