如何自定义Spinner下拉视图

9

是否可以自定义下拉菜单视图, 默认的下拉菜单视图有适配器视图。我想将该视图更改为我的自定义文本视图或类似内容。


请查看这个链接,希望对您有所帮助:http://mrbool.com/how-to-customize-spinner-in-android/28286 - Mohammad Rababah
你正在使用CustomAdapter还是ArrayAdapter? - Apoorv
实际上,您将自定义内容放在适配器中。它有“getView”、“getDropDownView”和“getDropDownView”方法,返回视图。在这些方法中,您创建并初始化文本视图并返回它。 - steven smith
3个回答

7
请将以下的内部类添加到您的类中,并按您的需要进行修改。
public class MyAdapter extends ArrayAdapter<String>{

        public MyAdapter(Context context, int textViewResourceId,   String[] objects) {
            super(context, textViewResourceId, objects);
        }

        @Override
        public View getDropDownView(int position, View convertView,ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            return getCustomView(position, convertView, parent);
        }

        public View getCustomView(int position, View convertView, ViewGroup parent) {

            LayoutInflater inflater=getLayoutInflater();
            View row=inflater.inflate(R.xml.row, parent, false);
            TextView label=(TextView)row.findViewById(R.id.company);
            label.setText(strings[position]);

            TextView sub=(TextView)row.findViewById(R.id.sub);
            sub.setText(subs[position]);

            ImageView icon=(ImageView)row.findViewById(R.id.image);
            icon.setImageResource(arr_images[position]);

            return row;
            }
        }

将此适配器添加到您的下拉列表中:
    Spinner mySpinner = (Spinner)findViewById(R.id.expandableImagesList);
    mySpinner.setAdapter(new MyAdapter(NewEventActivity.this, R.xml.row, strings));

同时创建一个新的xml文件,并添加所有你想要在下拉框中包含的内容:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="fill_parent"
 android:layout_height="wrap_content"
 android:orientation="vertical"
 android:padding="3dip"
>
    <ImageView
         android:id="@+id/image"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:src="@drawable/icon"/>
    <TextView
         android:layout_toRightOf="@+id/image"
         android:padding="3dip"
         android:layout_marginTop="2dip"
         android:textStyle="bold"
         android:id="@+id/company"
         android:text="CoderzHeaven"
         android:layout_marginLeft="5dip"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
     <TextView
         android:layout_toRightOf="@+id/image"
         android:padding="2dip"
         android:layout_marginLeft="5dip"
         android:id="@+id/sub"
         android:layout_below="@+id/company"
         android:text="Heaven of all working codes"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"/>
</RelativeLayout>

这是我的代码,你需要根据自己的需求进行更改。

1
你可以通过重写ArrayAdapter中的getDropDownView方法来自定义下拉视图。
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent){
     ...
}

@waqasalam,您能贴出一些示例代码以便理解它是如何工作的吗? - Strawberry

1
你可以做到。
arrayAdapter.setDropDownViewResource(R.layout.your_layout);

这里的your_layout是指只包含一个TextView的XML文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接