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

Posted

技术标签:

【中文标题】如何根据设备的分辨率更改样式?【英文标题】:How do I get the style to change based on the resolution of the device? 【发布时间】:2021-12-18 06:00:36 【问题描述】:

我一直在处理我的 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”。

【问题讨论】:

【参考方案1】:

除非自从我上次这样做后事情发生了变化,否则您需要为每个分辨率创建单独的 styles.xml 文件并将它们放在单独的文件夹中。两个文件中的样式名称应该相同。一个将放在“values”文件夹中,另一个将放在“values-sw720dp”中。

【讨论】:

以上是关于如何根据设备的分辨率更改样式?的主要内容,如果未能解决你的问题,请参考以下文章

如何根据设备/屏幕分辨率调整屏幕?

如何写自适应分辨率的网页

如何获取linux设备分辨率

检测视频分辨率变化

Javascript检测屏幕分辨率,更改css,相应裁剪图像

如何根据一些特定的分辨率计算分辨率?