Android Spinner中如何更改文本颜色

3

我有一个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)。他们说“定义”和“在当前主题中” - 我该如何在我的当前主题中定义它?让我抓狂...

1
可能是重复的问题:如何更改下拉框(Spinner)的文本大小和颜色? - Md Imran Choudhury
5个回答

5

您可以在主题中覆盖该属性,在这个例子中,我使用了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>

这正是我正在寻找的 - 我的代码基本上和你的一样,但它就是不起作用。不过我会再次将我的代码与你的进行比较。 - tfh
你可能应该在你的原始问题中包含样式,也许是你的 XML 出了一些简单的问题。 - oiZo

4

创建自定义 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);

2
我知道这一点。但对我来说,仅为更改颜色而添加新的xml资源文件是不可接受的。我希望通过仅更改我的theme.xml中的内容来实现颜色更改。无论如何,还是谢谢! - tfh

0

我回答了自己的问题 - 一切都按照文档所说的正常工作。我的问题在于我想在Spinner组件中使用"android.R.layout.simple_list_item_1"。只要我使用"android.R.layout.simple_spinner_item",它就可以工作。


0

改变文本颜色。

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

0

试试这个,

        // 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! - tfh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接