我的微调器上的文字是白色的,我不知道为什么。
这是我的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);
它有效。
答案 0 :(得分:96)
我有同样的问题,并找到了答案。你不使用应用程序上下文,只需使用getActivity()
(如果你在片段中)或者这个(如果你在活动中),它将起作用
dateAdapter = new ArrayAdapter<String>(**this**,
android.R.layout.simple_spinner_item, list);
答案 1 :(得分:13)
我使用
解决了这个问题getBaseContext()
而不是
getApplicationContext()
答案 2 :(得分:2)
由于我的应用主题,我也遇到了同样的问题。我通过替换
解决了这个问题android.R.layout.simple_spinner_item
带
android.R.layout.simple_list_item_1
在我的ArrayAdapter
中。我希望这可以解决你的问题
答案 3 :(得分:2)
我从
改变它new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_spinner_item, some_list);
要
新ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
它已修复,但我不想使用“this”
答案 4 :(得分:1)
您项目的 layout 文件夹中的 simple_spinner_item.xml 可能包含白色android:textColor="@android:color/white"
属性。
最好使用具有良好android:textColor="@android:color/COLOR_YOU_WANT_TO_USE"
属性的自定义微调器项布局。
答案 5 :(得分: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"/>
答案 6 :(得分: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);
答案 7 :(得分:0)
我已更改了微调器的textview的文本颜色,而没有创建新的布局。我知道已经很长时间了,但这对我有用,只是想分享一下。最好的部分是您可以在任何默认适配器上使用它。
这是代码:(此代码用于“活动”,而requireActivity用于片段)
1)Java
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
}
}