【问题标题】:How to change the color of the spinner NOT the dropdown items?如何更改微调器的颜色而不是下拉项目?
【发布时间】:2013-10-27 00:27:02
【问题描述】:

我添加了一个带有自定义列表适配器的 Spinner,它使用此布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_height="fill_parent"
    android:layout_width="fill_parent"
    android:gravity="center"
    android:textColor="@drawable/default_spinner_item_text"
    android:text="Sample Text"
    android:textSize="20dp"
    android:paddingBottom="7.5dp"
    android:background="@drawable/default_spinner_item"
    android:paddingTop="7.5dp">

</TextView>

可绘制的 default_spinner_item:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/default_button_text_color" />


    <item android:state_checked="true" android:drawable="@android:color/transparent"/>
    <item android:state_single="true" android:drawable="@android:color/transparent"/>
    <item android:state_active="true" android:drawable="@android:color/transparent"/>
    <item android:state_first="true" android:drawable="@android:color/transparent"/>
    <item android:state_focused="true" android:drawable="@android:color/transparent" />
    <item android:state_selected="true" android:drawable="@android:color/transparent" />


    <item android:drawable="@color/default_button_border_color" />
</selector>

微调器总是与下拉项获得相同的颜色...

我已经尝试了所有状态,但似乎不可能使微调器项目背景透明并且下拉列表着色(default_button_border_color)。

@Solved

这是我的适配器:

public class CustomSpinnerAdapter extends ArrayAdapter<String> {

    private int _resource;
    private Typeface _typeFace;

    public CustomSpinnerAdapter(MainActivity context, int resource, List<String> items) {
        super(context, resource, items);
        _resource = resource;
        _typeFace = context.getDefaultAppTypeFace();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView)super.getView(position, convertView, parent);
        if(convertView == null)
           view.setTypeface(_typeFace);
        }
        return view;
    }

    @Override
    public TextView getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView view = (TextView) super.getDropDownView(position, convertView, parent);
        if(convertView == null)
           view.setTypeface(_typeFace);
        }
        return view;
    }
}

我现在使用两种布局,一种用于视图,一种用于下拉视图。我的代码中的另一个错误是我调用了 super.getView(position, convertView, parent);在 getDropDownView 中。

【问题讨论】:

    标签: android android-spinner


    【解决方案1】:

    只需制作两个具有所需颜色的布局并将其设置如下:

    ArrayAdapter<yourObjecttype> adapter = new ArrayAdapter<yourObjecttype(this,R.layout.simple_spinner_item, list);
    adapter.setDropDownViewResource(R.layout.dropdown_layout);
    

    【讨论】:

      【解决方案2】:

      您必须从代码中完成。

      BaseAdapterArrayAdapter 等实现了一个名为 SpinnerAdapter 的接口

      这个接口提供了一个名为getDropDownView的方法。对 DropDown 元素使用此方法,对选择使用“正常”getView 方法应该可以解决问题。

      如果你使用ArrayAdapter,你也可以使用它的setDropDownViewResource方法

      【讨论】:

        【解决方案3】:

        试试这个

        <Spinner
        android:id="@+id/spinner1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/myspinner_background" />
        

        Drawable 文件夹下放置这个 myspinner_background.xml

        myspinner_background.xml:

        <?xml version="1.0" encoding="utf-8"?>
        <selector xmlns:android="http://schemas.android.com/apk/res/android">
        
            <item   android:drawable="@drawable/big_drop_down_selected" 
                    android:state_focused="false" 
                    android:state_pressed="true"/>
            <item   android:drawable="@drawable/big_drop_down"/>
        
        </selector>
        

        在活动中

        private ArrayAdapter<String> adpFromStation;
        Spinner spnrFromStation = (Spinner) findViewById(R.id.spinner1);
        adpFromStation = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item,StationNamesList);
                adpFromStation.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                spnrFromStation.setAdapter(adpFromStation);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-01-28
          • 2016-12-07
          • 2018-04-19
          • 1970-01-01
          • 2019-06-21
          • 2018-03-15
          • 2015-05-26
          • 2014-11-18
          相关资源
          最近更新 更多