首页 > 解决方案 > Android 主题并不完全适用于设备

问题描述

我为我的 Android 应用程序创建了一个自定义主题。在设计器和几个真实的测试设备中,它们都正确显示,但特定设备似乎没有正确应用部分主题。由于某种原因,任何不活动/禁用的东西看起来都使用相反状态的样式。示例:截屏 蓝色按钮被禁用,输入控件中的文本实际上是一个提示,但尽管在有问题的设备上它们并没有变灰。

主题本身与基本主题并没有太大变化:

<resources>

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar" >
    <item name="android:colorForeground">@android:color/background_light</item>
    <item name="android:textColorPrimary">@android:color/primary_text_light</item>
    <item name="colorAccent">@android:color/holo_blue_bright</item>
</style>

该设备运行 Android 6.0,应用程序目标 API 级别 >= 19。来自不同制造商的具有相同 Android 版本的另一台测试设备正常工作。

我已经尝试了一些建议的解决方案,例如将主题复制到values-v11https://stackoverflow.com/a/13443946/4429472values-v14但没有一个解决了问题。

编辑:有问题的手机是 Leagoo M8,带有 Freeme OS。

标签: androidandroid-themeandroid-styles

解决方案


在你的 res>value>colours.xml

添加这个

    <color name="colorForeground">#ffffffff</color>
    <color name="colorAccent">#FF4081</color>
    <color name="holo_blue_bright">#ff00ddff</color>
    <color name="bright_foreground_light_disabled">#80000000</color>
    <color name="bright_foreground_light">#ff000000</color>

在您的可绘制文件夹中创建一个选择器,名称为 selector_text.xml 在此代码之后

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false" android:color="@color/bright_foreground_light_disabled"/>
    <item android:state_window_focused="false" android:color="@color/bright_foreground_light"/>
    <item android:state_pressed="true" android:color="@color/bright_foreground_light"/>
    <item android:state_selected="true" android:color="@color/bright_foreground_light"/>
    <item android:state_activated="true" android:color="@color/bright_foreground_light"/>
    <item android:color="@color/bright_foreground_light"/> <!-- not selected -->

</selector>

使用此更新您的样式,还重命名样式 AppTheme_custom 并更改清单以及您使用此主题的位置。

<style name="AppTheme_custom" parent="Theme.AppCompat.Light.NoActionBar" >
    <item name="android:colorForeground">@color/colorForeground</item>
    <item name="android:textColorPrimary">@drawable/selector_text</item>
    <item name="colorAccent">@color/holo_blue_bright</item>
    </style>

推荐阅读