【问题标题】:Android theme doesn't apply fully to a deviceAndroid 主题并不完全适用于设备
【发布时间】:2018-08-22 13:50:46
【问题描述】:

我为我的 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 版本的另一台测试设备正常工作。

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

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

【问题讨论】:

  • 您能否提供有关该特定设备的信息。
  • 请看编辑。

标签: android android-theme android-styles


【解决方案1】:

在你的 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>

【讨论】:

  • 你能解释一下为什么以及如何解决这个问题吗?
  • 您使用的是 OS 的默认值,因此,如果自定义 OS 值可能会覆盖。所以最好利用自己的资源价值。
  • 您是否也将 AppTheme 名称更改为 AppTheme_custom 在使用时。
  • 是的,我确实重命名了主题,尽管我不清楚这有什么关系。
  • 避免与操作系统值冲突,如果是的话。只需再尝试改变 AppCompatTextView 中的 TextView 即可。
猜你喜欢
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2015-02-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多