【问题标题】:Overriding dropdown list style for Spinner in Dialog mode在对话框模式下覆盖 Spinner 的下拉列表样式
【发布时间】:2013-02-02 09:21:32
【问题描述】:

当 Spinner id 处于对话模式 (android:spinnerMode="dialog") 时,我需要覆盖下拉微调器项目列表。我需要这个来定义我自己的列表分隔符。

我在应用程序主题中找到了 dropDownListViewStyle 项,其中包含分隔项。它有效,但仅适用于 android:spinnerMode="dropdown"。

“对话”模式能有同样的效果吗?

【问题讨论】:

    标签: android android-widget


    【解决方案1】:

    试试这个:

    <Spinner
        android:id="@+id/spinnerAddToList"
        android:layout_width="0dp"
        android:layout_height="0dp"
        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_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingLeft="3dp"
        android:paddingRight="3dp">
    
        <TextView
            android:id="@+id/text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_vertical"
            android:textSize="18sp" />
    
        <LinearLayout
            android:id="@+id/separator"
            android:layout_height="1dp"
            android:layout_width="match_parent"
            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_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:paddingBottom="10dp"
        android:paddingLeft="3dp"
        android:paddingRight="3dp"
        android:paddingTop="10dp">
    
        <TextView
            android:id="@+id/text_view"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            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();
        });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      • 2017-12-07
      相关资源
      最近更新 更多