EditText 的特殊监听
// 输入框的 Enter 按键监听
et.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
//actionId 当前时间组件的资源 id
//event 表示键盘事件对象
Log.e("m_tag", "code:"+event.getKeyCode());
return false;
}
});
// 监听输入的内容变化
et.addTextChangedListener(new TextWatcher() {
//变化中
@Override
public void onTextChanged(CharSequence s, int start, int before,int count) {
}
//变化之前
@Override
public void beforeTextChanged(CharSequence s, int start, int count,int after) {
Log.e("m_tag", "before:" + s.toString());
}
//变化之后
@Override
public void afterTextChanged(Editable s) {
Log.e("m_tag", "after:" + s.toString());
}
});
多选框
xml
<CheckBox
android:id="@+id/ch_hiking"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 爬山 "
android:checked="true" />
其中 android:checked 属性表示设置选中状态, true 选中 false 不选中,等效于在 java 中
CheckBox chHiking = (CheckBox) findViewById(R.id.ch_hiking);
chHiking.setChecked(true);
Java
// 选择框状态发生变化的监听
private CompoundButton.OnCheckedChangeListener onCheckChange = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView,
boolean isChecked) {
Log.e("m_tag", buttonView.getText() + " " + isChecked);
String item = buttonView.getText().toString();
if (isChecked) {
selectItems.add(item);
} else {
selectItems.remove(item);
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.checkbox_layout);
selectItems = new LinkedList<String>();
CheckBox chHiking = (CheckBox) findViewById(R.id.ch_hiking);
//监听状态变化
chHiking.setOnCheckedChangeListener(onCheckChange);
...
}
单选按钮组
单选按钮 RadioButton 需要结合 RadioGroup 来使用, RadioGroup 继承自 LinearLayout 然后可以对 RadioButton 进行管理
xml :
<RadioGroup
android:id="@+id/group"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<RadioButton
android:id="@+id/radio_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="西瓜" />
<RadioButton
android:id="@+id/radio_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="南瓜"/>
...
</RadioGroup>
Java:
// 按钮组选择变化监听
private RadioGroup.OnCheckedChangeListener groupOnChange = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
if(checkedId == R.id.radio_3){
setTitle(" 恭喜你,选择正确 ");
}else{
setTitle(" 答错了 ");
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.radio_layout);
// 单选按钮组
RadioGroup group = (RadioGroup) findViewById(R.id.group);
// 设置按钮组的选择监听
group.setOnCheckedChangeListener(groupOnChange);
// 检测选中孩子
// int id = group.getCheckedRadioButtonId();
}
StateListDrawable( 资源选择器 )
可以实现对视图不同状态引用不同的资源来显示
使用:
在 drawable 文件夹中新建 xml 文件,根节点选择 selector
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 未按下的普通状态 -->
<item android:drawable="@drawable/btn_nomal" android:state_enabled="true" android:state_pressed="false"/>
<!-- 被按下状态 -->
<item android:drawable="@drawable/btn_press" android:state_enabled="true" android:state_pressed="true"/>
<!-- 不可用状态 -->
<item android:drawable="@drawable/btn_no_enable" android:state_enabled="false"/>
</selector>
关于视图可用与不可用
xml 属性
android:enabled="false" 不可用 true 是可用,默认为 true
java :
Button btn = (Button) findViewById(R.id.btn_submit);
// 设置视图的可用
btn.setEnabled(true);
ColorStateListDrawable
针对颜色的选择,作用在需要颜色的属性上,如: android : textColor
1 、可以在 res 下新建一个 color 文件夹
2 、在 color 文件夹中新建 xml 文件,注意 Resource Type 为 Color List
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 未按下的颜色 -->
<item android:state_pressed="false" android:color="#ff000000"/>
<!-- 按下的颜色 -->
<item android:state_pressed="true" android:color="#ffffffff"/>
</selector>
3 、使用
android:textColor="@color/tx_color"
选择框的前面按钮的控制
android:button="@null" 去掉前面的框
自定义 button 部分,可以定义 selector 文件,然后引用
checkedboxbtn.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 未选中 -->
<item android:drawable="@drawable/unchecked" android:state_checked="false"/>
<!-- 选中 -->
<item android:drawable="@drawable/checked" android:state_checked="true"/>
</selector>
布局中引用
<CheckBox
android:id="@+id/ch_photo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=" 摄影 "
android:button="@drawable/checked_box_btn"/>