如何根据设备的分辨率更改样式?

How do I get the style to change based on the resolution of the device?

我一直在处理我的 styles.xml 文件,目的是让按钮的文本根据应用加载时的分辨率改变颜色。我对样式进行了研究,发现可以添加限定符以根据分辨率指定相同的样式,例如 sw720 分辨率的“someStyle”和“someStyle_sw720”。所以我在应用程序中定义了样式“BodyButtonStyle”和“BodyButtonStyle_sw720”并赋予它们不同的值。

styles.xml -

中的两种样式(默认样式和 sw720 样式)

默认值:

<style name="BodyButtonStyle">
    <item name="android:layout_width">280dp</item>
    <item name="android:layout_height">50dp</item>
    <item name="android:fontFamily">@font/someText</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>

sw720:

<style name="BodyButtonStyle_sw720">
    <item name="android:layout_width">200dp</item>
    <item name="android:layout_height">50dp</item>
    <item name="android:fontFamily">@font/someText</item>
    <item name="android:textAllCaps">false</item>
    <item name="android:textAlignment">center</item>
    <item name="android:textColor">@color/colorPurple</item>
    <item name="android:textSize">30sp</item>
    <item name="android:background">@drawable/rectangle_shape_button</item>
    <item name="android:layout_gravity">center</item>
</style>

在我使用的布局中,样式设置为“@style/BodyButtonStyle”。我的假设是,如果我以 sw720 以外的任何分辨率加载应用程序,我会得到白色 (colorWhite) 文本,而 sw720 分辨率会给它紫色 (colorPurple) 文本。我做出这个假设是因为当有多种不同分辨率的布局时,应用程序将根据设备的分辨率选择正确的布局来使用(即名为“someLayout”的布局有一个 sw720 版本和一个 sw800 版本,一个 sw800 设备将加载 sw800 布局)。

我是不是漏掉了什么?我还尝试创建额外的 styles.xml 文件并使用它们自己的“BodyButtonStyle”加载它们,并根据分辨率使用不同的值,但无论分辨率如何,该应用程序似乎总是加载默认值。最终,我的目标是获得一个单一的布局来根据设备的分辨率为元素加载不同的值,而样式似乎是解决方案;然而,虽然我似乎遵循了限定符的说明(将“_sw720”添加到样式名称)它不起作用,并且只加载默认的“BodyButtonStyle”。

除非我上次执行此操作后情况有所改变,否则您需要为每个分辨率创建单独的 styles.xml 文件并将它们放在单独的文件夹中。两个文件中的样式名称应该相同。一个放在“values”文件夹,另一个放在“values-sw720dp”。