【问题标题】:How to change drop down selector color of spinner in android?如何在android中更改微调器的下拉选择器颜色?
【发布时间】:2016-12-07 23:00:16
【问题描述】:

我正在做一个项目,我想更改微调器下拉菜单的选择器颜色。我使用了以下代码。 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"/>

view_spinner_item

<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);

【问题讨论】:

  • 您可以使用自定义微调项。
  • 我已经在使用自定义微调器
  • 我不认为dropDownSelector 用于下拉菜单的颜色...
  • 先生,请给我任何建议,我可以用什么来代替这个。
  • 仅作为一般信息,似乎正在跟踪 android:dropDownSelector 的问题code.google.com/p/android/issues/detail?id=24922

标签: android android-layout listview android-studio android-spinner


【解决方案1】:

在一些旧版本的 android 上,这会改变所有微调器的颜色,但如果这对你没问题mSpinner.getBackground().setColorFilter(ContextCompat.getColor(getContext(), R.color.blue), PorterDuff.Mode.SRC_ATOP);

【讨论】:

    【解决方案2】:

    我想这会对你有所帮助

     @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>
    

    【讨论】:

      【解决方案3】:

      你可以使用android:dropDownSelector="#ffffff"而不是使用

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

      如果 api 级别当然大于 21 或使用自定义微调器下拉图像。

      【讨论】:

      • 这只是 API 21+
      • 这不是Android的问题很久了吗? API 命名和功能没有任何意义。
      【解决方案4】:

      在 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>
      

      你也可以自定义微调器

      【讨论】:

        猜你喜欢
        • 2015-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-28
        • 2013-10-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多