在Android Spinner中更改所选项目的背景颜色

时间:2016-07-29 08:31:01

标签: android spinner

我正在开发一款Android应用,并在我的应用中的许多地方使用Spinner。 我想要的是更改所选微调器项目的背景颜色,以便人们可以轻松识别当前选择的项目。

我已经检查了此链接Setting background color for Spinner Item on selection但是这样做会更改所选的textview背景颜色,但不会在下拉列表中更改其颜色,我想在我看到时更改所选textview的背景颜色下拉列表。

我想更改列表中所选项目的颜色,而不是在微调器上,请参见下图。

enter image description here 我怎样才能做到这一点?拜托,有人可以帮助我吗?。

非常感谢先进。

6 个答案:

答案 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));
} 

My spinner

相关问题