如何更改textView android.R.layout.simple_spinner_dropdown_item的颜色?

时间:2013-04-11 18:07:21

标签: android textview android-spinner android-styles

我正在使用内置资源ID android.R.layout.simple_spinner_dropdown_item

创建一个SpinnerAdapter
SpinnerAdapter 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的行为不同,例如填充是不同的。所以

  1. 有没有办法在xml文件中创建自己的布局资源,该文件继承了android.R.layout.simple_spinner_dropdown_item中的所有内容,并允许我覆盖textColor?
  2. 或者是android.R的完整定义。 layout.simple_spinner_dropdown_item可以在某个地方找到吗?
  3. 或许还有更简单的方法吗?

这个问题涉及我今天提出的另一个问题(Can't change the text color with Android Action Bar drop-down navigation)。我已经意识到这个问题的一个答案(也就是这个问题)是创建我自己的ArrayAdapter类,它继承自ArrayAdapter<T>,这样每当使用ArrayAdapter时我总能在代码中设置颜色(见我对这个问题的回答)。但这似乎是一个非常麻烦的解决方案: - |。

更改文字颜色不应该是一项艰巨的任务!

3 个答案:

答案 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等。