一: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();
}
});
}
}