39

我的微调器上的文字是白色的,我不知道为什么。

在此处输入图像描述

这是我的xml,没什么特别的

 <Spinner
     android:id="@+id/spinner_date"
     android:layout_width="0dp"
     android:layout_height="wrap_content"
     android:layout_weight="1" />

还有我的代码

dateSpinner = (Spinner) findViewById(R.id.spinner_date);
selectedDate = calendar.getTime();
List<String> list = new ArrayList<String>();
list.add(formatter.format(selectedDate));
dateAdapter = new ArrayAdapter<String>(mContext,
            android.R.layout.simple_spinner_item, list);
dateSpinner.setAdapter(dateAdapter);

我的文本显示为白色的原因可能是什么?

编辑:我找到了原因,我替换了在我的 onCreate 中设置的 mContext 参数。

mContext = getApplicationContext();

现在我用 d

ateAdapter = new ArrayAdapter<String>(this,
                android.R.layout.simple_spinner_item, list);

它有效。

4

8 回答 8

107

我有同样的问题并找到了答案。您不使用应用程序上下文,而是使用getActivity()(如果您在片段中)或 this(如果您在活动中),它将起作用

 dateAdapter = new ArrayAdapter<String>(**this**,
        android.R.layout.simple_spinner_item, list);
于 2013-07-16T02:14:49.873 回答
16

我使用解决了这个问题

getBaseContext()

代替

getApplicationContext()
于 2016-06-09T19:47:10.520 回答
3

我把它从

new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, some_list);

到新的ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);

它是固定的,虽然我不想使用“这个”

于 2013-11-02T02:28:45.710 回答
2

我也有同样的问题,这是因为我的应用程序主题。我通过更换解决了

android.R.layout.simple_spinner_item

android.R.layout.simple_list_item_1

在我的ArrayAdapter. 我希望这可以解决您的问题

于 2013-07-16T02:30:59.717 回答
2

我已经更改了该微调器的文本视图的文本颜色,而没有创建新的布局。我知道这已经很长时间了,但这对我有用,只是想分享一下。最好的部分是您可以在任何默认适配器上使用它。

这是代码:(用于 Activity 和用于 Fragments 的 requireActivity)

1) 爪哇

arrayAdapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,groups){
        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            View view = super.getView(position, convertView, parent);
            TextView listItem = view.findViewById(android.R.id.text1);
            listItem.setTextColor(Color.WHITE);
            listItem.setTextSize(20);
            listItem.setElevation(18);
            return view;
        }
    };

2)科特林

arrayAdapter = object : ArrayAdapter<String>(requireActivity(), android.R.layout.simple_spinner_item, spinnerCategoriesList) {
        override fun getView(position: Int, @Nullable convertView: View?, parent: ViewGroup): View {
            val view = super.getView(position, convertView, parent)
            val listItem = view.findViewById<TextView>(android.R.id.text1)
            listItem.setTextColor(Color.BLACK)
            listItem.textSize = 16f
            return view
        }
    }
于 2019-05-28T10:27:33.623 回答
1

也许您的项目布局文件夹中的simple_spinner_item.xml中有一个白色android:textColor="@android:color/white"属性。

最好使用具有良好android:textColor="@android:color/COLOR_YOU_WANT_TO_USE"属性的自定义微调器项目布局。

于 2013-05-03T08:13:31.160 回答
1

您可以轻松地设置 Spinner 的样式。使用这个style.xml

 <style name="SpinnerThemeLight" >
    <item name="android:colorBackground">@color/black</item>
    <item name="android:textColorPrimary">@color/black</item>
    <item name="android:textColorSecondary">@color/black</item>
    <item name="android:textColorTertiary">@color/black</item>
    <item name="android:textColorPrimaryDisableOnly">@color/black</item>
</style>

在上面的文件中,为了时间xml,我只是简单地给出了颜色。black只需使用它并整理出您喜欢的颜色。

定义Spinner如下activity.xml

 <android.support.v7.widget.AppCompatSpinner
   android:id="@+id/spinner"
   android:layout_width="wrap_content"
   android:layout_height="match_parent"
   android:entries="@array/countrys"
   android:spinnerMode="dropdown"
   android:theme="@style/SpinnerThemeLight"/>
于 2018-05-03T18:02:11.420 回答
0

我假设您已经为 Spinner 创建了自己的 TextView,例如

<TextView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textSize="14sp"
    android:textColor="@color/white"
    android:padding="5dip"
    />

并通过这样的调用将其粘到您的适配器上

String[] spinnerItems = getResources().getStringArray(R.array.my_array);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.spinner_text, spinnerItems);

这应该导致您的微调器的选择文本(包括下拉视图中的项目)涂成白色。现在,您的下拉视图的背景将受到您的应用程序主题的影响,在大多数情况下,这将导致您的白色文本呈现在白色背景上。为了避免这种情况,android 允许您为微调器下拉视图设置资源。您可以设置自己的视图或简单地使用默认的下拉视图,这将通过调用覆盖下拉菜单中的自定义文本视图

 adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

完整的代码可能如下所示

this.spinner = findViewById(R.id.spinnerView);
String[] spinnerItems = getResources().getStringArray(R.array.my_array);
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, R.layout.spinner_text, spinnerItems);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
this.spinner.setAdapter(adapter);
于 2019-01-31T10:30:08.160 回答