在android中是否有可能在XML中定义随配置而变化的常量

时间:2011-03-12 20:56:05

标签: android xml layout constants

我有兴趣在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 个答案:

答案 0 :(得分:38)

是的,你可以这样做,我们在Android本身的所有地方都这样做:)只需在res / values /,res / values-land /等中定义你的常量。对于尺寸,使用标签并使用它们引用它们布局中的@ dimen / my_value。

答案 1 :(得分:24)

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

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

答案 2 :(得分:1)

我会尽快解释。

首先,您可能会注意到,现在您应该按照Google的要求使用ConstraintLayout(请参阅androix库)。

在android studio projet中,您可以通过创建其他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