【问题标题】:Android change text color in a SpinnerAndroid 在 Spinner 中更改文本颜色
【发布时间】:2016-08-07 10:15:14
【问题描述】:

我有一个 Spinner 并使用一个 ArrayAdapter。在适配器中,我使用“android.R.layout.simple_list_item_1”,如下所示:

spinnerControlObjectType.setAdapter(new ArrayAdapter(getApplicationContext, android.R.layout.simple_list_item_1, list))

我查看了 android.R.layout.simple_list_item_1 并看到它有这样的文本样式:

android:textAppearance="?android:attr/textAppearanceListItemSmall"

我想在我的主题中覆盖“textAppearanceListItemSmall”以赋予它不同的颜色,我该怎么做?我不想继承任何东西或编写代码样板。我确信有一种方法可以改变颜色,只改变theme.xml。

在 android 文档中写道:'...引用样式属性本质上是说,“在当前主题中使用此属性定义的样式。”...' (http://developer.android.com/guide/topics/resources/accessing-resources.html#ReferencesToThemeAttributes)。他们说“已定义”和“在当前主题中” - 我如何在当前主题中定义它?让我发疯...

【问题讨论】:

标签: android colors styles themes spinner


【解决方案1】:

您应该只在您的主题中覆盖该属性,在此示例中,我使用 AppCompat 主题作为父主题,但您可以将其更改为任何其他主题。根据您的需要,您应该为不同版本的 Android 制作主题和样式资源:

<style name="MyTheme" parent="Theme.AppCompat.Light">
    <item name="android:textAppearanceListItemSmall">@style/MySpinnerStyle</item>
</style>

<style name="MySpinnerStyle" parent="TextAppearance.AppCompat.Subhead">
    <item name="android:textSize">13sp</item>
    <item name="android:textColor">@color/white</item>
</style>

【讨论】:

  • 这正是我正在寻找的 - 我的代码中基本上有这个,但它只是不起作用。但我又把我的和你的比较了一下。
  • 那么您可能应该在原始问题中包含样式,也许这是您的 xml 有问题的简单问题。
【解决方案2】:

为您的微调器项目制作自定义 XML 文件

spinner_layout.xml

添加自定义颜色

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/custom_spinner"
    android:textSize="16sp"
    android:text="HELLO"
    android:padding="10dp"
    android:textColor="@color/colorAccent"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

使用此文件显示您的微调器项目

        ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, R.layout.spinner_layout,ar);
        mSpinner.setAdapter(adapter);

【讨论】:

  • 我知道这一点。但对我来说,添加新的 xml 资源文件仅用于更改颜色是不可接受的。我只想通过更改我的 theme.xml 中的内容来更改颜色。还是谢谢!
【解决方案3】:

试试这个,

        // Initializing an ArrayAdapter
        final ArrayAdapter<String> spinnerArrayAdapter = new ArrayAdapter<String>(
                this,R.layout.spinner_item,plantsList){
            @Override
            public View getDropDownView(int position, View convertView,
                                        ViewGroup parent) {
                View view = super.getDropDownView(position, convertView, parent);
                TextView tv = (TextView) view;

                    // Set the Text color
                    tv.setTextColor(Color.parseColor("#FFC9A3FF"));

                return view;
            }
        };
        spinnerArrayAdapter.setDropDownViewResource(R.layout.spinner_item);
        spinner.setAdapter(spinnerArrayAdapter);

【讨论】:

  • 我只想更改主题中的样式以更改颜色。对于简单的颜色变化来说,这只是很多工作。无论如何,谢谢,Pradeep!
【解决方案4】:

我回答我自己的问题 - 一切都如文档所述。我的问题是我想在 Spinner 组件中使用“android.R.layout.simple_list_item_1”。一旦我使用“android.R.layout.simple_spinner_item”,它就起作用了。

【讨论】:

    【解决方案5】:

    改变文字颜色。

     ((TextView) parent.getChildAt(0)).setTextColor(Color.BLACK);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-27
      • 2019-06-17
      相关资源
      最近更新 更多