Android学习笔记十一之Android基础UI二
RadioButton单选按钮
RadioButton单选按钮,通常与RadioGroup一起使用才可以实现互斥的单选效果,如果是单独使用不是单选效果。RadioButton不能像CheckBox那样选中了不能取消选中,只能通过选择其他选项取消当前选项。通过设置setOnCheckedChangeListener对单选进行监听,当然,也可以通过按钮点击事件获取选择的值。下面实现这两种方法:
第一种,设置setOnCheckedChangeListener事件监听,实现代码如下:
tv_select_1 = (TextView) findViewById(R.id.tv_select_1);
rg1 = (RadioGroup) findViewById(R.id.rg1);
rg1.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int i) {
RadioButton radioButton = (RadioButton) radioGroup.findViewById(i);
tv_select_1.setText("你的性别是:" + radioButton.getText());
}
});
第二种,通过点击事件,获取选中的值,代码如下:
tv_select_2 = (TextView) findViewById(R.id.tv_select_2);
rg2 = (RadioGroup) findViewById(R.id.rg2);
btn_submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
for (int i = 0; i < rg2.getChildCount(); i++) {
RadioButton radioButton = (RadioButton) rg2.getChildAt(i);
if (radioButton.isChecked()) {
tv_select_2.setText("你选择的爱好是:" + radioButton.getText());
break;
}
}
}
});
布局代码就不贴了,放上实现效果图:
CheckBox多选框
CheckBox多选按钮框,可以同时选择多个,选中的情况下可以单击取消选择,可以为每一个CheckBox设置事件监听器,也可以通过点击事件来判断哪些CheckBox被选择,下面是实现方式:
第一种,为每一个CheckBox设置监听,实现代码如下:
cb_sport_1 = (CheckBox) findViewById(R.id.cb_sport_1);
cb_sport_2 = (CheckBox) findViewById(R.id.cb_sport_2);
cb_sport_3 = (CheckBox) findViewById(R.id.cb_sport_3);
cb_sport_4 = (CheckBox) findViewById(R.id.cb_sport_4);
cb_sport_1.setOnCheckedChangeListener(this);
cb_sport_2.setOnCheckedChangeListener(this);
cb_sport_3.setOnCheckedChangeListener(this);
cb_sport_4.setOnCheckedChangeListener(this);
tv_check_1 = (TextView) findViewById(R.id.tv_check_1);
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
StringBuffer buffer = new StringBuffer("你喜欢的运动有:");
if (compoundButton.isChecked()) {
buffer.append(compoundButton.getText());
tv_check_1.setText(buffer.toString());
}
}
第二种,实现一个点击事件,代码如下:
cb_fruit_1 = (CheckBox) findViewById(R.id.cb_fruit_1);
cb_fruit_2 = (CheckBox) findViewById(R.id.cb_fruit_2);
cb_fruit_3 = (CheckBox) findViewById(R.id.cb_fruit_3);
cb_fruit_4 = (CheckBox) findViewById(R.id.cb_fruit_4);
cb_fruit_5 = (CheckBox) findViewById(R.id.cb_fruit_5);
btn_checkbox_select = (Button) findViewById(R.id.btn_checkbox_select);
tv_check_2 = (TextView) findViewById(R.id.tv_check_2);
btn_checkbox_select.setOnClickListener(this);
@Override
public void onClick(View view) {
StringBuffer buffer = new StringBuffer();
buffer.append("你喜欢的水果是:");
if (cb_fruit_1.isChecked()) {
buffer.append(cb_fruit_1.getText());
}
if (cb_fruit_2.isChecked()) {
buffer.append(cb_fruit_2.getText());
}
if (cb_fruit_3.isChecked()) {
buffer.append(cb_fruit_3.getText());
}
if (cb_fruit_4.isChecked()) {
buffer.append(cb_fruit_4.getText());
}
if (cb_fruit_5.isChecked()) {
buffer.append(cb_fruit_5.getText());
}
tv_check_2.setText(buffer.toString());
}
最后实现效果如下:
Spinner下拉列表
Spinner提供了从一个数据集合中快速选择一项值的办法。默认情况下Spinner显示的是当前选择的值,点击Spinner会弹出一个包含所有可选值的dropdown菜单,从该菜单中可以为Spinner选择一个新值。下面介绍spinner的基本用法:
Spinner控件的基本属性:
1、entries属性: 设置改属性,可以直接在xml布局文件中绑定数据源,也可以不设置,在代码中动态绑定数据源
2、spinnerMode属性: Spinner的显示形式,Spinner菜单的两种显示方式,弹出框和下拉列表,通过设置spinnerMode的值可以设置显示方式
android:spinnerMode="dropdown"
android:spinnerMode="dialog"
3、android:dropDownHorizontalOffset:设置列表框的水平偏移距离
4、android:dropDownVerticalOffset:设置列表框的水平竖直距离
5、android:dropDownSelector:列表框被选中时的背景
6、android:dropDownWidth:设置下拉列表框的宽度
7、android:gravity:设置里面组件的对其方式
8、android:popupBackground:设置列表框的背景
9、android:prompt:设置对话框模式的列表框的提示信息(标题),只能够引用string.xml 中的资源id,而不能直接写字符串
下面通过使用ArrayAdapter进行适配数据和自定义适配器实现Spinner:
使用ArrayAdapter进行适配数据:
String[] names = getResources().getStringArray(R.array.spinner_name);
spinner_first = (Spinner) findViewById(R.id.spinner_first);
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, names);
tv_spinner_result1 = (TextView) findViewById(R.id.tv_spinner_result1);
spinner_first.setAdapter(arrayAdapter);
spinner_first.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String result = adapterView.getItemAtPosition(i).toString();
tv_spinner_result1.setText("你选择的水果是:" + result);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
使用自定义适配器实现(推荐使用):
private class SpinnerAdapter extends BaseAdapter {
private String[] names = {"Java语言", "C语言", "C++语言", "JavaScript", "PHP语言", "Swift语言"};
@Override
public int getCount() {
return names.length;
}
@Override
public Object getItem(int i) {
return names[i];
}
@Override
public long getItemId(int i) {
return 0;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
ViewHolder viewHolder;
if (view == null) {
view = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_spinner, null);
viewHolder = new ViewHolder();
viewHolder.textView = (TextView) view.findViewById(R.id.tv_spinner_adapter);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.textView.setText(names[i]);
return view;
}
}
static class ViewHolder {
TextView textView;
}
spinnerAdapter = new SpinnerAdapter();
spinner_second = (Spinner) findViewById(R.id.spinner_second);
tv_spinner_result2 = (TextView) findViewById(R.id.tv_spinner_result2);
spinner_second.setAdapter(spinnerAdapter);
spinner_second.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
String result = adapterView.getItemAtPosition(i).toString();
tv_spinner_result2.setText("你选择的编程语言是:" + result);
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
前面一个类是自定义适配器,这种写法比较简单。自定义适配器可以定义自己需要的样式,而且实现起来可以有很多的自由行。
效果图:
附上RadioButton单选按钮、CheckBox多选框、Spinner下拉列表的API: