gpt4 book ai didi

android - 如何更改 Spinner 下拉项的文本颜色?

转载 作者:行者123 更新时间:2023-11-29 14:46:41 28 4
gpt4 key购买 nike

我想将 Spinner 下拉项的文本颜色更改为黑色。

我有一个列出不同语言的自定义 Spinner。它有一个 ImageView 和一个 TextView。微调器显示在蓝色背景和白色文本上,看起来不错。

问题是当它被点击时,下拉菜单出现了,但是由于下拉菜单的浅灰色和文本的白色,文本几乎看不见。

这是 activity_main.xml 中 Spinner 的代码:

<Spinner
android:id="@+id/languageSpinner"
style="@android:style/Widget.Material.Light.DropDownItem.Spinner"
android:layout_width="140dp"
android:layout_height="40dp"
android:prompt="@string/selectLanguageSpinner"
android:spinnerMode="dropdown" />

这是 spinner_row_layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:orientation="horizontal">

<ImageView
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />

<TextView
android:id="@+id/language"
android:layout_width="wrap_content"
android:layout_height="40dp"
android:layout_gravity="center_vertical"
android:layout_marginEnd="10dp"
android:layout_marginStart="5dp"
android:gravity="center_vertical"
android:lineSpacingExtra="20dp"
android:minHeight="40dp"
android:textColor="@color/white"
android:textSize="20sp" />
</LinearLayout>
</LinearLayout>

这里文本颜色设置为白色,因为我需要它在没有被选中时是白色的。

这是styles.xml中的代码:

<!-- Base application theme. -->
<style name="AppTheme" parent="Base.Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/myAppPrimaryColor</item>
<item name="colorPrimaryDark">@color/myAppPrimaryDarkColor</item>
<item name="colorAccent">@color/myAppAccentColor</item>
<item name="android:dropDownListViewStyle">@style/TestSpinnerStyle</item>
<item name="android:spinnerItemStyle">@style/mySpinnerItemStyle</item>
</style>

<style name="mySpinnerItemStyle">
<item name="android:paddingLeft">5dp</item>
<item name="android:paddingBottom">3dp</item>
<item name="android:textSize">20sp</item>
<item name="android:textColor">@color/white</item>
</style>

<!-- ^^ Here I need to set the color to white, because I also have default
spinner on the activity that needs to have a default white color.
But when the default spinner is clicked, the color of the
drop down items is black. How can I do that with my custom spinner? -->

<style name="TestSpinnerStyle" parent="android:style/Widget.ListView.DropDown">
<item name="android:textSize">22sp</item>
<item name="android:textColor">@color/black</item>
<item name="android:height">20dp</item>
<item name="android:divider">@color/gray</item>
<item name="android:dividerHeight">1dp</item>
<item name="android:dividerPadding">5dp</item>
<item name="android:background">@color/default_gray</item>
</style>

<!-- ^^ The text color property here is not reflected.. -->

有没有人有任何建议如何做到这一点?

编辑:在评论和答案的帮助下,我设法做到了。我认为它可以用 XML 完成...无论如何在后面的 java 代码中,这就是我所做的:

定义自定义适配器后,我们需要覆盖 getDropDownView 方法,该方法在单击微调器并显示下拉列表时触发。 getView 方法也应该被重写,这样当 Spinner 没有被点击时我们可以处理默认颜色。换句话说,这是代码:

public class CustomSpinnerAdapter extends ArrayAdapter<String> {
public CustomSpinnerAdapter(Context context, int textViewResourceId, String[] objects, TypedArray image){
super(context, textViewResourceId, objects);
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.spinner_row_layout, parent, false);

TextView label = (TextView) row.findViewById(R.id.language);
label.setText(languages_list[position]);

label.setTextColor(getResources().getColor(android.R.color.black));

ImageView icon = (ImageView) row.findViewById(R.id.icon);
icon.setImageDrawable(icons_list.getDrawable(position));

return row;
}

@Override
public View getView(int position, View convertView, ViewGroup parent){
LayoutInflater inflater = getLayoutInflater();
View row = inflater.inflate(R.layout.spinner_row_layout, parent, false);

TextView textView = (TextView) row.findViewById(R.id.language);
textView.setText(languages_list[position]);
textView.setTextColor(getResources().getColor(android.R.color.white));

ImageView icon = (ImageView) row.findViewById(R.id.icon);
icon.setImageDrawable(icons_list.getDrawable(position));

return row;
}
}

请注意 getDropDownViewTextView 的颜色设置为黑色,而在 getView 中它设置为白色。

最佳答案

我已经这样做了,但是在 BaseAdapter

public View getDropDownView(int position, View convertView, ViewGroup parent) {
View view = convertView;
if (view == null) {
view = inflater.inflate(R.layout.spinner_item, null);
}

TextView txtTestText = (TextView) view.findViewById(R.id.txtSpinnerRowText);
txtTestText.setText(list.get(position).getText());
if (getSelectedPosition() == position) {
txtTestText.setTextColor(context.getResources().getColor(android.R.color.holo_blue_dark));
} else {
txtTestText.setTextColor(context.getResources().getColor(android.R.color.primary_text_light));
}
return view;
}

关于android - 如何更改 Spinner 下拉项的文本颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34198009/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com