Nougat (android.R.layout.simple_spinner_item) 上深色背景上的黑色文本

Posted

技术标签:

【中文标题】Nougat (android.R.layout.simple_spinner_item) 上深色背景上的黑色文本【英文标题】:Black text on dark background on Nougat (android.R.layout.simple_spinner_item) 【发布时间】:2017-06-08 04:39:55 【问题描述】:

我在 Welcome Activity 上有一些基本代码,它像往常一样简单地绑定 List 适配器:

final ArrayAdapter<String> spinnerAdapter = new ArrayAdapter<>(this, android.R.layout.simple_spinner_item, android.R.id.text1);
    spinnerAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

在我更新到 API 级别 25 之前一直有效。此时,在没有其他更改的情况下,微调器下拉列表的文本变得不可读:

我的主题的父主题是“Theme.AppCompat.Light.NoActionBar”,但同样,我不是在玩颜色,并且自从它正确显示以来没有任何变化(API

我知道我可以在spinner.setOnItemSelectedListener() 中使用一些setTextColor() 来修复它,但重点是要了解它为什么起作用而现在却不起作用,因为这可能表明我在概念上有些错误,甚至是某种Android错误。事实上,我在相当标准的小部件/应用程序上注意到了同样的问题(深色背景上的黑色文本),比如 Cyanogen/LineageOS 默认天气之一:

【问题讨论】:

让我检查一下,没看到您使用的是 Android 微调器项 我也有同样的问题。我知道20级很好。 24 和 25 都不好。 我也有同样的问题。它在20级上运行良好。升级到25后,它就出现了这个问题。但是,即使我从25级降级到20级,还是不行。 @PokerIncome.com 你找到解决方案了吗? 【参考方案1】:

我有同样的问题。 您的颜色定义可能是android:textColor="#FFFFFFFF"。当我将它修复为android:textColor="#FF000000" 时,它工作正常。或者你可以使用android:textColor="#FFFFFFFF"

我从同事那里听说,前 2 个十六进制的含义已更改。已更改 SDK 版本 24。

【讨论】:

【参考方案2】:

对我来说,问题是在运行时,当我尝试创建微调器时,颜色有问题,所以我做了一个解决方法,在文本中使用我想要的颜色制作一个布局,并在暗模式下设置此布局,只是制作很明显,我在测试开始时使用了默认主题,但它也不起作用,我创建并放入 color.xml 文件的内容也不起作用

/* Start Workaround */
int layout = R.layout.simple_spinner_item_black;
if (AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_YES)layout = R.layout.simple_spinner_item_white;
/* End Workaround */

【讨论】:

以上是关于Nougat (android.R.layout.simple_spinner_item) 上深色背景上的黑色文本的主要内容,如果未能解决你的问题,请参考以下文章

什么是 android.R.layout.simple_list_item_1?

关于android R.layout.没有出现自己写的布局解决方法

请教ListView中列表项用的android.R.layout.simple

通知图标在 Nougat 中显示为 Square

API 级别 24 中的前台服务 - Android 7.0 Nougat

仅从 Android 7.0 (Nougat) 开始支持默认接口方法