2.代码实现
(1)res/drawable/shape_edit_normal.xml功能:编辑框没获得焦点时,使用该shape。<shape.../>为根元素的ShapeDrawable资源,主要用于定义一个基本的几何图形,如矩形、圆形、线条等。 <solid.../>子元素用于指定填充集合图形的的颜色; <corners.../>子元素用于定义几个图形的四个角的弧度; <gradient../>子元素用于指定填充几何图形的渐变颜色; <stroke../>子元素指定几何图形边框线宽度以及颜色; <padding../>子元素指定几何图形的内边框源码如下:
<?xml version="1.0" encoding="utf-8"?>(2)res/drawable/shape_edit_focus.xml源码如下:编辑框获得焦点时,使用该shape。与上面的shape区别是,<stroke../>元素的颜色属性值设置不一致。
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="4dip"/>
<stroke
android:width="1dip"
android:color="#BDC7D8" />
</shape>
<?xml version="1.0" encoding="utf-8"?>(3)res/drawable/selector_edit_frame.xml功能:用于设置文件编辑框是否有获取焦点时对应的<shape.../>资源。<selector.../>为根元素的StateListDrawable资源,用于组织多个Drawable对象。当使用StateListDrawable作为目标组件的背景、前景图片时,StateListDrawable对象所显示的Drawable对象会随目标组件状态的改变自动切换。该元素可以包含多个<item../>子元素,该元素可指定如下属性: >android:color或android:drawable:指定颜色或Drawable对象; >android:state_xxx:指定一个特定状态;
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<solid android:color="#FFFFFF" />
<corners android:radius="4dip"/>
<stroke
android:width="1dip"
android:color="#728ea3" />
</shape>
<?xml version="1.0" encoding="utf-8"?>(4)res/layout/main.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_window_focused="false" android:drawable="@drawable/shape_edit_normal"/>
<item android:state_focused="true" android:drawable="@drawable/shape_edit_focus"/>
</selector>
......
<EditText
android:background="drawable/selector_edit_frame"
android:layout_width="match_parent"
android:layout_weight="wrap_content"/>
......
二、动态检测EditText的输入 在Android项目开发中,往往我们在实现登录或注册功能时,需要动态来检测验证码框中的内容来决定是否使能登录/注册按钮。Android系统提供了一个TextWatch事件监听器,其可以实现动态检测EditText输入情况。1.效果演示
2.源码实现功能:动态检测验证码输入框是否与随机验证码字符匹配,若匹配则使能登录按钮并改变其背景颜色。
protected void onCreate(Bundle savedInstanceState) {
Button loginBtn = (Button)findViewById(R.id.login);
EditText secCode = (EditText) findViewById(R.id.login_security_code);
secCode.addTextChangedListener(new TextWatcher() {
/**
*文本编辑框内容未改变前回调该方法
*/
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
loginBtn.setEnabled(false); //
loginBtn.setBackgroundColor(Color.parseColor("#DEB887"));
}
/**
*文本编辑框内容改变时回调该方法
*/
public void onTextChanged(CharSequence s, int start, int before,
int count) {
loginBtn.setEnabled(false);
loginBtn.setBackgroundColor(Color.parseColor("#DEB887"));
}
/**
*文本编辑框内容改变后回调该方法
*/
public void afterTextChanged(Editable s) {
if (secCode.getText().toString().equalsIgnoreCase(verityCode)) {
loginBtn.setEnabled(true);
loginBtn.setBackgroundResource(R.drawable.selector_btn_background);
}
}
});
}