我正在使用内置资源ID android.R.layout.simple_spinner_dropdown_item
创建一个SpinnerAdapterSpinnerAdapter mSpinnerAdapter = ArrayAdapter.createFromResource(this, R.array.action_list, android.R.layout.simple_spinner_dropdown_item);
但该资源ID创建的textView有textColor Black,我需要不同的颜色。改变颜色但保持其他一切的最佳方法是什么?
当我尝试在xml文件中创建自己的textView布局资源时,例如
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/White"
/>
然后它的行为与android.R.layout.simple_spinner_dropdown_item的行为不同,例如填充是不同的。所以
这个问题涉及我今天提出的另一个问题(Can't change the text color with Android Action Bar drop-down navigation)。我已经意识到这个问题的一个答案(也就是这个问题)是创建我自己的ArrayAdapter
类,它继承自ArrayAdapter<T>
,这样每当使用ArrayAdapter时我总能在代码中设置颜色(见我对这个问题的回答)。但这似乎是一个非常麻烦的解决方案: - |。
更改文字颜色不应该是一项艰巨的任务!
答案 0 :(得分:9)
要扩展Sam的解决方案,您需要以非常具体的方式修改文件以覆盖Android的样式。
将simple_spinner_dropdown_item.xml
从sdk文件夹复制到正在使用的正确布局文件夹后,您将看到以下代码:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="?android:attr/dropdownListPreferredItemHeight"
android:ellipsize="marquee" />
为了更改TextView的背景并避免此错误:
... / res / layout / simple_spinner_dropdown_item.xml:20:错误:错误:属性不公开。 (在'layout_height',其值为'?android:attr / dropdownListPreferredItemHeight')。
您的代码需要如下所示:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/spinnerText"
style="@style/SpinnerTextViewItem"
android:singleLine="true"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="marquee" />
需要做的另一个主要变化是创建自己的风格。您可能有一个styles.xml文件,因此添加一个类似于此的新样式:
<style name="SpinnerTextViewItem" parent="@android:style/Widget.TextView" >
<item name="android:textStyle">normal</item>
<item name="android:background">@color/green</item>
</style>
假设您的colors.xml文件中有一些内容,您可以通过“@ color / green”或您选择的任何颜色设置颜色(当然您可以使用@android:color / ...)更不用说全部了您可以添加的其他项目来更改TextView。
答案 1 :(得分:8)
有没有办法在xml文件中创建自己的布局资源,该文件继承了android.R.layout.simple_spinner_dropdown_item中的所有内容,并允许我覆盖textColor?
不,但你可以削减&amp;将您最喜欢的simple_spinner_dropdown_item.xml
版本粘贴到新文件,然后只需更改文字颜色。
或者是某个地方可以找到android.R.layout.simple_spinner_dropdown_item的完整定义吗?
是的,但有许多不同的版本。您喜欢哪种API?另外,您的硬盘驱动器上也可能有副本,请检查<android-sdk>/platforms/android-xx/data/res/layout/
(其中xx
是特定的API。)
作为一种替代方法,您可以创建自定义适配器并在每行充气后更改文本颜色,但上面的方法会稍快一些,因为它不会涉及任何运行时更改。
答案 2 :(得分:0)
不使用自定义适配器,无法更改
的颜色 android.R.layout.simple_spinner_dropdown_item
更好地创建自定义适配器,然后您可以更改颜色,testSixe,textStyle等。