首页 > 解决方案 > 如何获得默认布局以根据设备分辨率使用不同的样式表?

问题描述

所以我正在处理的这个应用程序中有大量的活动,对于每个活动,有 5 个布局(默认,sw650dp,sw730dp,sw800dp,sw800dp-h1050dp),每个布局都有自己的属性和使用样式分配的值.xml 文件。

我想要做的是让每个活动都使用一个默认布局,并根据设备的分辨率加载正确的 styles.xml。

示例:活动“activity_user”具有默认布局,为文本和按钮等元素分配样式(@style/textStyle 和@style/buttonStyle)。在@res/values/styles 目录下,有5 个styles.xml 文件,都是不同分辨率的,它们都有一个名为“textStyle”和“buttonStyle”的样式。如果应用程序在 sw800dp 的设备上运行,则从 sw800dp 版本的 styles.xml 文件中提取“textStyle”和“buttonStyle”样式。

示例图片:

在此处输入图像描述

由于Android知道根据设备的分辨率选择哪个布局,我假设为每个分辨率添加一个styles.xml,然后删除相关分辨率的布局,只要样式的名称在所有styles.xml文件中都是相同的. 但是,它似乎只采用默认样式.xml 的任何命名样式,并且所有其他分辨率都被忽略。

示例:默认布局为某些文本分配“BodyButtonStyle”样式 (@style/BodyButtonStyle)。在默认的 styles.xml 中,文本是白色的,但在 sw800dp 版本中,文本是橙色的。但是,当我在 sw800dp 设备上加载应用程序时,文本是白色的。

默认的 styles.xml 和 sw800dp styles.xml 都有这样声明的样式 -

默认:

<style name="BodyButtonStyle">
    <item name="android:layout_width">280dp</item>
    <item name="android:layout_height">50dp</item>
    <item name="android:fontFamily">@font/someFont</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:textAlignment">center</item>
    <item name="android:textColor">@color/colorWhite</item>
    <item name="android:textSize">25sp</item>
    <item name="android:background">@drawable/rectangle_shape_button</item>
     <item name="android:layout_gravity">center</item>
</style>

sw800dp:

<style name="BodyButtonStyle">
    <item name="android:layout_width">400dp</item>
    <item name="android:layout_height">80dp</item>
    <item name="android:fontFamily">@font/someFont</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:textAlignment">center</item>
    <item name="android:textColor">@color/colorPink</item>
    <item name="android:textSize">45sp</item>
    <item name="android:background">@drawable/rectangle_shape_button</item>
    <item name="android:layout_gravity">center</item>
    <item name="layout_constraintBottom_toTopOf">@+id/guideline_bottom</item>
    <item name="layout_constraintEnd_toEndOf">parent</item>
    <item name="layout_constraintHorizontal_bias">0.5</item>
    <item name="layout_constraintStart_toStartOf">parent</item>
</style>

我如何获得默认布局以根据分辨率加载正确的 styles.xml 文件,因为当布局有多个分辨率时它似乎会自动执行?

标签: javaandroidlayoutstyles

解决方案


推荐阅读