我有兴趣在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>
然后我可以在每个配置中复制具有不同值的文件。
感谢您的帮助
答案 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 /目录来提供特定于屏幕的布局。一种用于需要不同布局的每种屏幕配置。
这意味着在两种情况下都必须使用目录限定符:
因此,这是一个示例:
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