Android: Add two TextViews to Actionbar Spinner

佐手、 提交于 2019-12-12 04:35:01

问题


Is there anyway to add two text views or strings inside of the Actionbar Spinner?

Similar to how the Android GMAIL app does it.


回答1:


You could use a custom ArrayAdapter:

public class spinnerAdapter extends ArrayAdapter {
        private LayoutInflater inflater;
        public spinnerAdapter(Context context, int textViewResourceId) {
            super(context, textViewResourceId);
            inflater = LayoutInflater.from(context);
        }

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

            if(convertView == null){
                holder = new ViewHolder();
                convertView = inflater.inflate(R.layout.spinner_text_layout, null);
                holder.text1 = (TextView)convertView.findViewById(R.id.spinnerText1);
                holder.text2 = (TextView)convertView.findViewById(R.id.spinnerText2);
                convertView.setTag(R.layout.spinner_text_layout, holder);
            } else{
                holder = (ViewHolder)convertView.getTag(R.layout.spinner_text_layout);
            }

            holder.text1.setText("Position: " );
            holder.text2.setText(position);

            return convertView;
            }

        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            ViewHolder2 holder;

            if(convertView == null){
                holder = new ViewHolder2();
                convertView = inflater.inflate(R.layout.spinner_text_layout, null);
                holder.text1 = (TextView)convertView.findViewById(R.id.spinnerText1);
                holder.text2 = (TextView)convertView.findViewById(R.id.spinnerText2);
                convertView.setTag(R.layout.spinner_text_layout, holder);
            } else{
                holder = (ViewHolder2)convertView.getTag(R.layout.spinner_text_layout);
            }

            holder.text1.setText("Position: " );
            holder.text2.setText(position);

            return convertView;
            }

        static class ViewHolder{
            TextView text1;
            TextView text2;
        }

        static class ViewHolder2{
            TextView text1;
            TextView text2;
        }

    }

spinner_text_layout.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >

<TextView
    android:id="@+id/spinnerText1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentLeft="true"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="18dp"
    android:layout_marginTop="16dp"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />

<TextView
    android:id="@+id/spinnerText2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/textView1"
    android:layout_alignParentRight="true"
    android:layout_marginRight="23dp"
    android:text="Medium Text"
    android:textAppearance="?android:attr/textAppearanceMedium" />




回答2:


ActionBar.setListNavigationCallbacks(...)

It's just a SpinnerAdapter. If you are familiar with adapters, you can make your own class extending BaseAdapter and have a custom layout. If you aren't familiar with adapters, I suggest you watch The World of ListView.



来源:https://stackoverflow.com/questions/17176763/android-add-two-textviews-to-actionbar-spinner

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!