如何在Android中更改Spinner下拉选择器的颜色?

4
我正在处理一个项目,想要更改下拉菜单中Spinner的选择器颜色。我使用了以下代码:android:dropDownSelector="#ffffff"但是它没有起作用,请提供任何方法。谢谢。
这是我的代码。
<Spinner
            android:id="@+id/spinner2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:spinnerMode="dropdown"
            android:textColor="#ffffff"
            android:textSize="19sp"
            android:popupBackground="#80000000"
            android:dropDownSelector="#ffffff"
            android:background="@drawable/spinner"
            android:layout_marginRight="13dp"
            android:gravity="center_vertical"
            android:layout_marginLeft="13dp"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"/>

视图_旋转框项目
<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:textColor="#8d95a7"
    android:text="Gender"
    android:textSize="17sp"
    android:drawableRight="@drawable/iconarrow3"
    />

旋转器代码
 Spinner spinner2 = (Spinner) findViewById(R.id.spinner2);
    String[] items2 = new String[]{"Male","Female"};
    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(
            this,
            R.layout.view_spinner_item,
            items2
    );
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_item);
    spinner2.setAdapter(adapter2);

您可以使用自定义的下拉列表项。 - Dexter
我已经使用自定义的下拉框了。 - Noman Malik
我认为 dropDownSelector 不是用于下拉框的颜色... - Ali Bdeir
那么先生,请给我任何建议,我可以用什么代替这个。 - Noman Malik
仅供一般参考,看起来关于android:dropDownSelector的问题正在被追踪 https://code.google.com/p/android/issues/detail?id=24922 - Alt-Cat
4个回答

1
在一些旧版本的Android上,这将改变所有微调器的颜色,但如果这对您来说可以接受,可以使用以下代码:mSpinner.getBackground().setColorFilter(ContextCompat.getColor(getContext(), R.color.blue), PorterDuff.Mode.SRC_ATOP);

1
在style.xml中添加以下代码。
<style name="AppSpinnerDropDownItem" parent="Base.Widget.AppCompat.DropDownItem.Spinner">
    <item name="android:background">@drawable/selector_spinner_item</item>

</style>

将此样式添加到您的应用程序主题中。
      <item name="android:spinnerDropDownItemStyle">@style/AppSpinnerDropDownItem</item>

selector_spinner_item.xml

  <selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/layers_spinner_item_selected"></item>
<item android:state_checked="false" android:drawable="@drawable/layers_spinner_item"></item>
<item android:drawable="@drawable/layers_spinner_item"></item>

你也可以自定义Spinner


0

你可以使用以下代码替代 android:dropDownSelector="#ffffff"

android:backgroundTint="@android:color/holo_green_dark"

如果API级别大于21,当然可以使用自定义下拉旋转图片。

这仅适用于API 21及以上版本。 - Ali Bdeir
Android 不是长时间存在这个问题了吗?API 命名和功能毫无意义。 - Aayush Goyal

0

我认为这会对你有所帮助

 @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Simple Spinner Android Example
        initSimpleSpinner();

        //Android Custom Spinner Example Programmatically
        initCustomSpinner();

    }

    private void initCustomSpinner() {

        Spinner spinnerCustom = (Spinner) findViewById(R.id.spinnerCustom);
        // Spinner Drop down elements
        ArrayList<String> languages = new ArrayList<String>();
        languages.add("Andorid");
        languages.add("IOS");
        languages.add("PHP");
        languages.add("Java");
        languages.add(".Net");
        CustomSpinnerAdapter customSpinnerAdapter = new CustomSpinnerAdapter(SpinnerMainActivity.this, languages);
        spinnerCustom.setAdapter(customSpinnerAdapter);
        spinnerCustom.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                String item = parent.getItemAtPosition(position).toString();

                Toast.makeText(parent.getContext(), "Android Custom Spinner Example Output..." + item, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }

    private void initSimpleSpinner() {
        // Spinner element
        Spinner spinner = (Spinner) findViewById(R.id.spinner);

        // Spinner Drop down elements
        List<String> languages = new ArrayList<String>();
        languages.add("Andorid");
        languages.add("IOS");
        languages.add("PHP");
        languages.add("Java");
        languages.add(".Net");

        // Creating adapter for spinner
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, languages);

        // Drop down layout style - list view with radio button
        dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        // attaching data adapter to spinner
        spinner.setAdapter(dataAdapter);
        spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

                String item = parent.getItemAtPosition(position).toString();

                Toast.makeText(parent.getContext(), "Android Simple Spinner Example Output..." + item, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });
    }


    public class CustomSpinnerAdapter extends BaseAdapter implements SpinnerAdapter {

        private final Context activity;
        private ArrayList<String> asr;

        public CustomSpinnerAdapter(Context context, ArrayList<String> asr) {
            this.asr = asr;
            activity = context;
        }


        public int getCount() {
            return asr.size();
        }

        public Object getItem(int i) {
            return asr.get(i);
        }

        public long getItemId(int i) {
            return (long) i;
        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            TextView txt = new TextView(SpinnerMainActivity.this);
            txt.setPadding(16, 16, 16, 16);
            txt.setTextSize(18);
            txt.setGravity(Gravity.CENTER_VERTICAL);
            txt.setText(asr.get(position));
            txt.setTextColor(Color.parseColor("#000000"));
            return txt;
        }

        public View getView(int i, View view, ViewGroup viewgroup) {
            TextView txt = new TextView(SpinnerMainActivity.this);
            txt.setGravity(Gravity.CENTER);
            txt.setPadding(16, 16, 16, 16);
            txt.setTextSize(16);
            txt.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.mipmap.ic_launcher, 0);
            txt.setText(asr.get(i));
            txt.setTextColor(Color.parseColor("#000000"));
            return txt;
        }

    }

并将其添加到您的可绘制文件中

<?xml version="1.0" encoding="UTF-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
       android:shape="rectangle"
>
    <solid android:color="@android:color/white"/>


    <corners android:radius="4dp"></corners>
    <stroke android:color="#cccccc" android:width="1dp"/>

</shape> 

Xml文件代码

 <LinearLayout   xmlns:android="http://schemas.android.com/apk/res/android"
                  android:orientation="vertical"
                  android:padding="10dip"
                  android:layout_width="fill_parent"
                  android:layout_height="wrap_content">

        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip"
            android:text="Simple Spinner"
            android:layout_marginBottom="5dp"/>

        <Spinner
            android:spinnerMode="dropdown"
            android:id="@+id/spinner"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />


        <TextView
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dip"
            android:text="Custom Spinner"
            android:layout_marginBottom="5dp"/>

        <Spinner
            android:background="@drawable/spinner"
            android:spinnerMode="dropdown"
            android:id="@+id/spinnerCustom"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
        />

    </LinearLayout>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接