一、Spinner(下拉列表)

1、常用属性

android:entries=""
//指定spinner要显示的字符串资源,必须是在strings或者attrs资源文件中定义的字符串资源
android:spinnerMode="dialog" 
//spinner的模式,枚举值有两个值dialog和dropdown,默认就是dropdown
android:prompt="@string/ "
//当spinnerMode的值是dialog时有效,弹出的对话框式的下列列表的提示(类似标题)
//此处的值不能直接使用直接字符串,必须使用引用(字符串资源)
android:popupBackground="#00A2E8"
//设置下拉菜单列表的背景
android:dropDownWidth="100dp"
//设置下拉菜单列表的宽度
//最后两个属性在spinnerMode为dropdown时候有效

spinnerMode为dropdown和dialog时的效果:

android 项目ui组件 安卓中常用的ui控件_ui

2、结合适配器ArrayAdapter/SimpleAdapter使用

ArrayAdapter:数组类型适配器
作用:将指定的数据源显示到item选项布局中

默认情况下,这类要求提供一个资源ID来引用一个单独TextView,也就是说数据源的每一项必须放在布局文件中的TextView业显示,无论如何,这个TextView是要被引用的

ArrayAdapter提供了三个构造方法:

  • 带四个参数的构造方法(常用)
    ArrayAdapter(context, resource, textViewResourceId, objects)
    参数一:上下文对象
    参数二:绑定的布局文件(自定义或者系统提供)
    参数三:布局文件中对应的TextView的id
    参数四:数据源,List集合或数组都可以。
  • 带三个参数的构造方法(不常用)
    ArrayAdapter(context, resource, textViewResourceId, objects)
    参数一:上下文对象
    参数二:布局文件的id,该布局文件中只能有一个TextView标签
    参数三:参数二布局文件中要显示数据的TextView的id
    参数四:原始数据,List集合或数组都可以。
  • 带两个参数的构造方法(不常用)
    ArrayAdapter(context, resource)
    参数一:上下文对象
    参数二:布局文件(一定要有一个TextView)
sp = (Spinner) findViewById(R.id.sp3);
        sp4 = (Spinner) findViewById(R.id.sp33);
        //ArrayAdapter
        String[] city = { "深圳", "上海", "北京", "广州" };
//       ArrayAdapter<String> cityArr = new ArrayAdapter<String>(this,
//       R.layout.spinner);
//       ArrayAdapter<String> cityArr = new ArrayAdapter<String>(this,
//       android.R.layout.simple_spinner_dropdown_item);
        // cityArr.addAll(city);
//       ArrayAdapter<String> cityArr = new ArrayAdapter<String>(this,
//       R.layout.spinner, city);
        ArrayAdapter<String> cityArr = new ArrayAdapter<String>
                (this, //上下文对象
                R.layout.spinner2,//布局文件
                R.id.tvspinner2,//布局文件对应的控件id
                city//数据源
                ) {};
        sp.setAdapter(cityArr);

        // simpleadapter
        data = new ArrayList<Map<String, Object>>();
        Map<String, Object> map1 = new HashMap<String, Object>();
        map1.put("value", "深圳");
        map1.put("icon", R.drawable.pic1);
        data.add(map1);
        Map<String, Object> map2 = new HashMap<String, Object>();
        map2.put("value", "北京");
        map2.put("icon", R.drawable.pic2);
        data.add(map2);
        Map<String, Object> map3 = new HashMap<String, Object>();
        map3.put("value", "上海");
        map3.put("icon", R.drawable.pic3);
        data.add(map3);
        Map<String, Object> map4 = new HashMap<String, Object>();
        map4.put("value", "广州");
        map4.put("icon", R.drawable.pic4);
        data.add(map4);
        Map<String, Object> map5 = new HashMap<String, Object>();
        map5.put("value", "杭州");
        map5.put("icon", R.drawable.pic5);
        data.add(map5);
        Map<String, Object> map6 = new HashMap<String, Object>();
        map6.put("value", "福州");
        map6.put("icon", R.drawable.pic6);
        data.add(map6);

        sl = new SimpleAdapter(this,//上下文对象
                data,//数据源
                R.layout.spinner3,//布局文件
                new String[] { "icon", "value" },//绑定的值 
                new int[] { R.id.ivicon3,R.id.tvspinner3 //布局文件对应的控件id
                });
        sp4.setAdapter(sl);

android 项目ui组件 安卓中常用的ui控件_ui_02

ArrayAdapter和SimpleAdapter的区别是 ArrayAdapter 只能传入一种数据类型,SimpleAdapter可以传入一组不同类型的数据。

//TODO 查看ArrayAdapter和SimpleAdapter源码

二、AutoCompleteTextView/MultiAutoCompleteTextView

MultiAutoCompleteTextView继承自AutoCompleteTextView
AutoCompleteTextView继承自EditText

1、常用属性:

android:completionThreshold="数字"  //当输入几个字符后开始提示
android:completionHint="请选择你的姓名" //根据你的输入弹出数据让你选择的时候的提示语。
textCursorDrawable="@null" //设置光标颜色与文本颜色一致
dropDownWidth //下拉菜单的宽度

2、使用方法

String[] str = { "shenzheng", "beijing", "shanghai", "guangzhou","fujian", "hangzhou", "nanjing", "hubei" };
        AutoCompleteTextView act = (AutoCompleteTextView) findViewById(R.id.act1);
        MultiAutoCompleteTextView act2 = (MultiAutoCompleteTextView) findViewById(R.id.act2);
         '//使用MultiAutoCompleteTextView必须实现MultiAutoCompleteTextView.Tokenizer接口,
         //可以使用Android提供的实现类MultiAutoCompleteTextView.CommaTokenizer,
        //用于声明用于选项与选项之间分隔的符号,一般如不特殊指定,设定使用英文逗号","进行分隔选项
        act2.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
        //适配器绑定数据源
        ArrayAdapter<String> ap = new ArrayAdapter<String>(this,android.R.layout.simple_dropdown_item_1line, str);
        //添加适配器到要监听的控件
        act.setAdapter(ap);
        act2.setAdapter(ap);
        //监听内容更改.
        act.addTextChangedListener(new TextWatcher() {

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
                Log.i("listener", "改变中s="+s+",start="+start+",before="+before+",count="+count);
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
                Log.i("listener", "改变前s="+s+",start="+start+",count"+count);

            }

            @Override
            public void afterTextChanged(Editable s) {
                Log.i("listener", "改变后s="+s);
            }
        });

android 项目ui组件 安卓中常用的ui控件_ui_03