自定义微调器的上下文菜单
Custom Spinner's context menu
如何自定义 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>
@style/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>
@drawable/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;
}
}
所以我重复这个问题:如何为微调器进行定制设计? (圆角、更大的字体、选择器、项目之间的分隔线)
感谢您的帮助。
如果我对你的问题的理解正确,你只需要为你的项目创建单独的布局,然后通过这样的调用为你的微调器创建适配器:
mAdapter = new ArrayAdapter(context, R.layout.your_spinner_item_layout, data);
使用此代码更新您的 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;
}
getView() 和getDropDownView() 对应两种视图类型。 getView() 是微调器元素中的选定视图,getDropDownView() 是展开列表中的行。使用与普通 ListView 适配器中使用的相同模式的自定义视图调整 getDropDownView()。制作自定义 XML 视图,对其进行膨胀、饱和、return 等
如何自定义 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>
@style/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>
@drawable/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;
}
}
所以我重复这个问题:如何为微调器进行定制设计? (圆角、更大的字体、选择器、项目之间的分隔线)
感谢您的帮助。
如果我对你的问题的理解正确,你只需要为你的项目创建单独的布局,然后通过这样的调用为你的微调器创建适配器:
mAdapter = new ArrayAdapter(context, R.layout.your_spinner_item_layout, data);
使用此代码更新您的 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;
}
getView() 和getDropDownView() 对应两种视图类型。 getView() 是微调器元素中的选定视图,getDropDownView() 是展开列表中的行。使用与普通 ListView 适配器中使用的相同模式的自定义视图调整 getDropDownView()。制作自定义 XML 视图,对其进行膨胀、饱和、return 等