Android 高级控件(一)

一:AutoCompleteTextView自动提示

在输入框中输入我们想要输入的信息就会出现其他与其相关的提示信息,这种效果在Android中是用AutoCompleteTextView实现的。
xml页面设置控件:

<AutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="1"
        android:id="@+id/actv_main_tv"
        />

activity中简单模拟一个数据源,设置适配器以及监听事件

//自动补全
        actv_main_tv = (AutoCompleteTextView) findViewById(R.id.actv_main_tv);



        //定义数据源
        String data[]={"张三","张三丰","李四","李雷","110","114","119","120","12306"};

        //适配器
        ArrayAdapter adapter=new ArrayAdapter(this,R.layout.item_actv,data);


        //给控件设置适配器
        actv_main_tv.setAdapter(adapter);



    }

二:MultiAutoCompleteTextView多段自动补全

可支持选择多个值(在多次输入的情况下),分别用分隔符分开,并且在每个值选中的时候再次输入值时会自动去匹配

xml页面设置控件:

<MultiAutoCompleteTextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:completionThreshold="1"
        android:id="@+id/mctv_main_mv"
        />

activity中模拟一个数据源,设置适配器以及监听事件:

//多段自动补全
        mctv_main_mv = (MultiAutoCompleteTextView) findViewById(R.id.mctv_main_mv);

        //定义数据源
        String data[]={"张三","张三丰","李四","李雷","110","114","119","120","12306"};

        //适配器
        ArrayAdapter adapter=new ArrayAdapter(this,R.layout.item_actv,data);

        //设置分隔符(默认,)
        MultiAutoCompleteTextView.Tokenizer tokenizer=new MultiAutoCompleteTextView.CommaTokenizer();
        mctv_main_mv.setTokenizer(tokenizer);

        //给控件设置适配器
        mctv_main_mv.setAdapter(adapter);

三:Spinner下拉列表

Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。

这里我们完成一个使用spinner的二级联动:
<1>首先设置连个下拉控件:

 <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sp_ld_1"
        >
    </Spinner>
    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/sp_ld_2"
        android:layout_marginLeft="50dp"
        >
    </Spinner>

<2>activity中模拟数据

sp_ld_1 = (Spinner) findViewById(R.id.sp_ld_1);
        sp_ld_2 = (Spinner) findViewById(R.id.sp_ld_2);


        pro = new String[]{"湖南","广东","山西"};
        map = new HashMap<String,List<String>>();
        a = new ArrayList<>();
        a.add("郴州");
        a.add("永州");
        map.put("湖南",a);
        a = new ArrayList<>();
        a.add("深圳");
        a.add("韶关");
        map.put("广东",a);
        a = new ArrayList<>();
        a.add("晋城");
        a.add("长治");
        a.add("运城");
        a.add("太原");
        map.put("山西",a);

<3>设置适配器

ArrayAdapter proa=new ArrayAdapter(this,android.R.layout.simple_list_item_1,pro);

        sp_ld_1.setAdapter(proa);

<4>监听事件

 sp_ld_1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                List<String> myl=map.get(pro[position]);
                ArrayAdapter prob=new ArrayAdapter(LD2Activity.this,android.R.layout.simple_list_item_1,myl);
                sp_ld_2.setAdapter(prob);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {

            }
        });

效果如图:
这里写图片描述

四:ListView

ListView是一个经常用到的控件,ListView里面的每个子项Item可以使一个字符串,也可以是一个组合控件

仿设置页面:

private String big[]={"网络","个人"};
    private Map<String,String[]> map=new HashMap<>();



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_lv);
        LinearLayout   ll = (LinearLayout) findViewById(R.id.aaaaa);

        map.put(big[0],new String[]{"wifi","热点"});
        map.put(big[1],new String[]{"隐私","安全"});
        //将控件添加到布局中去:
        for (int i = 0; i < big.length; i++) {
            String[]  a = map.get(big[i]);
            TextView tv= new TextView(this);
            ListView lv= new ListView(this);
            ArrayAdapter aa=new ArrayAdapter(this,android.R.layout.simple_list_item_1, a);
            tv.setText(big[i]);
            lv.setAdapter(aa);
            ll.addView(tv);
            //调用内部类实现监听
            new bb(a, lv);
        }
    }

    class bb{
        private String[] x;
        public bb(final String x[],ListView lv){
            this.x=x;
            lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    Toast.makeText(LVActivity.this, x[position], Toast.LENGTH_SHORT).show();
                }
            });
        }

    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值