我正在开发一款Android应用,并在我的应用中的许多地方使用Spinner。 我想要的是更改所选微调器项目的背景颜色,以便人们可以轻松识别当前选择的项目。
我已经检查了此链接Setting background color for Spinner Item on selection但是这样做会更改所选的textview背景颜色,但不会在下拉列表中更改其颜色,我想在我看到时更改所选textview的背景颜色下拉列表。
我想更改列表中所选项目的颜色,而不是在微调器上,请参见下图。
非常感谢先进。
答案 0 :(得分:16)
您需要在适配器类中实现以下方法:
它会帮助你:
int selectedItem = -1;
ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list) {
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent)
{
View v = null;
v = super.getDropDownView(position, null, parent);
// If this is the selected item position
if (position == selectedItem) {
v.setBackgroundColor(Color.BLUE);
}
else {
// for other views
v.setBackgroundColor(Color.WHITE);
}
return v;
}
};
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
mySpinner.setAdapter(dataAdapter);
现在在旋转器中选择的项目下面
selectedItem = position;
答案 1 :(得分:1)
以下是XML解决方案:
Spinner看起来像:
<Spinner
android:id="@+id/settingsSleepingTimePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/spinner_main_button"
android:popupBackground="@color/colorPrimary"
android:textColor="@android:color/white"
android:textSize="20sp"/>
创建微调器时,将setDropDownViewResource设置为自定义布局:
adapter.setDropDownViewResource(R.layout.spinner_item);
spinner_item.xml看起来像:
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/spinner"
android:textColor="#ffffff"
android:textSize="20sp" />
最后我们像这样设置@ drawable / spinner:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/colorPrimaryLight" android:state_hovered="true" />
<item android:drawable="@color/colorPrimaryLight" android:state_selected="true" />
</selector>
希望我的回答会有所帮助!
答案 2 :(得分:0)
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="colorControlNormal">@color/spinner_background</item>
</style>
在颜色文件夹中定义Spinner_background颜色..
答案 3 :(得分:0)
尝试在drawable中创建一个选择器,例如
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="false" android:drawable="@color/colorPrimary" />
<item android:drawable="@android:color/transparent" />
</selector>
将微调器背景设置为
android:background="@drawable/spinner_selector"
答案 4 :(得分:0)
我已经在互联网上搜索了一个正确的解决方案来做到这一点,而无需在java代码中硬编码背景行为。 您可以使用drawable实现此目的(设置所选项目背景颜色)。
您需要做什么将dropdownViewResource
设置为自定义布局。那个布局应该是这样的:
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/spinner_item_background"
android:gravity="left"
android:padding="8dp" />
在spinner_item_background.xml
中,您可以为每个项目状态定义背景。例如,如果您想在按下时产生涟漪效果,但选择时会产生稳定效果,您可以尝试这样做:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Activated state is the selected item -->
<item android:state_activated="true" android:drawable="#00ff00"/>
<!-- Pressed state is the one the user is interacting with -->
<item android:state_pressed="true" android:drawable="#00ff00"/>
<!-- The rest of the items -->
<item android:drawable="#ffffff"/>
</selector>
答案 5 :(得分:0)
在“活动”中创建一个int
变量public static int posOfItemSpinnerSelected
:
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
posOfItemSpinnerSelected=position;
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
并在您的适配器中插入此代码
if(position== YourActivity.posOfItemSpinnerSelected){
textView.setBackgroundColor(ContextCompat.getColor(mActivity,R.color.item_spinner_selected));
} else {
textView.setBackgroundColor(ContextCompat.getColor(mActivity,R.color.white));
}