【问题标题】:How can I change the color of the textView android.R.layout.simple_spinner_dropdown_item?如何更改 textView android.R.layout.simple_spinner_dropdown_item 的颜色?
【发布时间】:2013-04-11 18:07:20
【问题描述】:

我正在使用内置资源 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&lt;T&gt; 以便我可以在使用 ArrayAdapter 时始终在代码中设置颜色(请参阅我的答案那个问题)。但这似乎是一个非常麻烦的解决方案:-|。

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

【问题讨论】:

    标签: android textview android-spinner android-styles


    【解决方案1】:

    有没有办法在 xml 文件中创建我自己的布局资源,该文件继承自 android.R.layout.simple_spinner_dropdown_item 的所有内容并允许我覆盖 textColor?

    不可以,但您可以将自己喜欢的 simple_spinner_dropdown_item.xml 版本剪切并粘贴到新文件中,然后只需更改文本颜色即可。

    或者 android.R.layout.simple_spinner_dropdown_item 的完整定义在某处可用?

    是的,但有许多不同的版本。你喜欢哪个 API?此外,您的硬盘上可能已经有一个副本,请检查 &lt;android-sdk&gt;/platforms/android-xx/data/res/layout/(其中 xx 是一个特定的 API。)


    作为另一种方法,您可以创建自定义适配器并在为每一行充气后更改文本颜色,但上述方法会稍微快一些,因为它不涉及任何运行时更改。

    【讨论】:

    • thx vm :-)。事实上我已经找到了你的替代方法,但现在你告诉我在哪里寻找 xml 定义我可能会切换到那个。
    • +1 表示您的思路...我已添加到您的解决方案中,因为如果不进行更改,这将无法立即工作。
    【解决方案2】:

    要扩展 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 的其他项目。

    【讨论】:

      【解决方案3】:

      不使用自定义适配器是不可能改变颜色的

       android.R.layout.simple_spinner_dropdown_item
      

      最好创建一个自定义适配器,然后您可以更改颜色、testSixe、textStyle 等。

      【讨论】:

      • 好吧,如果你按照 Sam 说的去做,那么你就可以编辑 simple_spinner_dropdown_item.xml...
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-17
      • 2016-02-19
      • 2015-07-22
      相关资源
      最近更新 更多