自定义微调器的上下文菜单

时间:2015-03-20 19:13:31

标签: android android-layout android-spinner

如何自定义Spinners的上下文菜单? 我已经对选择器视图(http://i.stack.imgur.com/uJzYP.png)进行了自定义,但不知道如何对内容菜单执行此操作。

例如选择不同的颜色,圆角,更大的字体等。

现在看起来像是:http://i.stack.imgur.com/jnH31.png

片段的布局

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:background="@color/white"
tools:context="tenkol.design.com.imbrecords.FragmentEditProfile">

.....

<Spinner
    android:id="@+id/spinner_countries"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/editText_edit_user_email"
    android:layout_marginTop="12dp"
    android:layout_centerHorizontal="true"
    android:drawSelectorOnTop="true"
    android:popupBackground="@color/blue"
    style="@style/spinner_style"
    />

    .....
</RelativeLayout>

@风格/ spinner_style

<style name="spinner_style">
    <item name="android:background">@drawable/spinner_bg</item>
    <item name="android:layout_marginLeft">3dp</item>
    <item name="android:layout_marginRight">3dp</item>
    <item name="android:layout_marginBottom">10dp</item>
    <item name="android:paddingLeft">8dp</item>
    <item name="android:paddingTop">5dp</item>
    <item name="android:paddingBottom">5dp</item>
</style>

@绘制/ spinner_bg

<?xml version="1.0" encoding="utf-8"?>

<item>
    <layer-list>
        <item>
            <shape>
                <gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" />

                <stroke android:width="1dp" android:color="@color/blue" />

                <corners android:radius="5dp" />

                <padding android:bottom="3dp" android:left="3dp" android:right="10dp" android:top="3dp" />
            </shape>
        </item>
        <item>
            <bitmap android:gravity="center_vertical|right" android:src="@drawable/spinner" />

        </item>
    </layer-list>
</item>

我为此微调器提供了自定义适配器

class SpinAdapter extends ArrayAdapter<DataCountry>{

private Context context;
private List<DataCountry> values;

public SpinAdapter(Context context, int textViewResourceId,
                   List<DataCountry> values) {
    super(context, textViewResourceId, values);
    this.context = context;
    this.values = values;
}

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

public DataCountry getItem(int position){
    return values.get(position);
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    LayoutInflater inflater = LayoutInflater.from(context);
    View row = inflater.inflate(R.layout.spinner_layout_row, parent, false);
    TextView countryName = (TextView)row.findViewById(R.id.spinner_row);
    countryName.setText(context.getString(R.string.edit_user_country));
    countryName.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.abc_text_size_title_material_toolbar));
    countryName.setTextColor(context.getResources().getColorStateList(R.color.deep_blue));

    return row;
}

@Override
public View getDropDownView(int position, View convertView,
                            ViewGroup parent) {
    TextView label = new TextView(context);
    label.setTextColor(Color.BLACK);
    label.setText(values.get(position).getName());

    return label;
}
}

所以我重复一下这个问题:如何为微调器进行自定义设计? (圆角,更大的字体,选择器,可能是项目之间的分隔线)

感谢您的帮助。

3 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你只需要为你的项目创建单独的布局,然后通过这样的调用为你的微调器创建适配器:

    mAdapter = new ArrayAdapter(context, R.layout.your_spinner_item_layout, data);

答案 1 :(得分:0)

使用此代码更新getDropDownView()并创建微调器项目的自定义布局

 @Override
    public View getDropDownView(int position, View convertView,ViewGroup parent) {
            View row= View.inflate(mContext,R.layout.spinner_item_list, null);
            TextView label=(TextView)row.findViewById(R.id.textView);
            label.setText(values.get(position).getName());
           label.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.abc_text_size_title_material_toolbar));
          label.setTextColor(context.getResources().getColorStateList(R.color.deep_blue));
            return row;
    }

答案 2 :(得分:0)

getView()和getDropDownView()对应于两种视图类型。 getView()是spinner元素中的选定视图,getDropDownView()是展开列表中的行。使用与普通ListView适配器中使用的相同模式的自定义视图调整getDropDownView()。制作自定义XML视图,对其进行充气,使其饱和,返回等等。