在对话框模式下覆盖 Spinner 的下拉列表样式
Posted
技术标签:
【中文标题】在对话框模式下覆盖 Spinner 的下拉列表样式【英文标题】:Overriding dropdown list style for Spinner in Dialog mode 【发布时间】:2013-02-02 09:21:32 【问题描述】:当 Spinner id 处于对话模式 (android:spinnerMode="dialog") 时,我需要覆盖下拉微调器项目列表。我需要这个来定义我自己的列表分隔符。
我在应用程序主题中找到了 dropDownListViewStyle 项,其中包含分隔项。它有效,但仅适用于 android:spinnerMode="dropdown"。
“对话”模式能有同样的效果吗?
【问题讨论】:
【参考方案1】:试试这个:
<Spinner
android:id="@+id/spinnerAddToList"
android:layout_
android:layout_
android:layout_marginTop="10dp"
android:theme="@style/ThemeOverlay.AppCompat.Light"
android:spinnerMode="dialog"/>
下拉布局 spinner_item_line_drop.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical"
android:paddingLeft="3dp"
android:paddingRight="3dp">
<TextView
android:id="@+id/text_view"
android:layout_
android:layout_
android:gravity="center_vertical"
android:textSize="18sp" />
<LinearLayout
android:id="@+id/separator"
android:layout_
android:layout_
android:background="@color/colorPrimary"
android:orientation="vertical"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"/>
</LinearLayout>
主视图布局:spinner_item_line_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_
android:layout_
android:orientation="vertical"
android:paddingBottom="10dp"
android:paddingLeft="3dp"
android:paddingRight="3dp"
android:paddingTop="10dp">
<TextView
android:id="@+id/text_view"
android:layout_
android:layout_
android:gravity="center_vertical"
android:textSize="18sp" />
</LinearLayout>
微调适配器:
public class SpinnerLineAdapter extends BaseAdapter
private List<MyListEntity> values;
public SpinnerLineAdapter(List<MyListEntity> values)
this.values = values;
public void setValue(List<MyListEntity> list)
this.values = list;
@Override
public int getCount()
return values.size();
@Override
public MyListEntity getItem(int position)
return values.get(position);
@Override
public long getItemId(int position)
return position;
@Override
public View getView(int position, View convertView, ViewGroup parent)
View itemView = convertView;
ViewHolder viewHolder;
Context context = parent.getContext();
if (convertView == null)
itemView = LayoutInflater.from(context).inflate(R.layout.spinner_item_line_main, parent, false);
viewHolder = new ViewHolder();
viewHolder.textView = itemView.findViewById(R.id.text_view);
itemView.setTag(viewHolder);
else
viewHolder = (ViewHolder) itemView.getTag();
viewHolder.textView.setText(values.get(position).getName());
return itemView;
public View getDropDownView(int position, View convertView,ViewGroup parent)
View itemView = convertView;
ViewHolder viewHolder;
Context context = parent.getContext();
if (convertView == null)
itemView = LayoutInflater.from(context).inflate(R.layout.spinner_item_line_drop, parent, false);
viewHolder = new ViewHolder();
viewHolder.textView = itemView.findViewById(R.id.text_view);
itemView.setTag(viewHolder);
else
viewHolder = (ViewHolder) itemView.getTag();
viewHolder.textView.setText(values.get(position).getName());
return itemView;
private static class ViewHolder
TextView textView;
活动:
SpinnerLineAdapter spinnerAddToListAdapter = new SpinnerLineAdapter(list);
spinnerAddToList.setAdapter(spinnerAddToListAdapter);
spinnerAddToList.setSelection(0, false);
spinnerAddToList.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
@Override
public void onItemSelected(AdapterView<?> adapterView, View view,
int position, long id)
MyListEntity list = spinnerAddToListAdapter.getItem(position);
viewModel.addList(list.id);
viewModel.update(myEntity);
@Override
public void onNothingSelected(AdapterView<?> adapter)
);
按钮点击显示对话框:
mButtonAdd.setOnClickListener(view ->
spinnerAddToList.performClick();
);
【讨论】:
以上是关于在对话框模式下覆盖 Spinner 的下拉列表样式的主要内容,如果未能解决你的问题,请参考以下文章
下拉列表框Spinner-采用自定义布局文件作为Spinner样式
android 中如何设置Spinner点击后弹出的下拉列表的宽度样式