在编写代码的时候,如果需要让文本框能够跟随编辑框输入的内容而显示出来的话,可以使用TextWatcher。
另外,使用该接口可以控制编辑状态和效果,具体看代码。
完整代码:
package com.xsjayz.textwatcher;
import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
/**
* EditText在布局中经常用到,对EditText中输入的内容也经常需要进行限制,
* 可以通过TextWatcher去观察输入框中输入的内容来限制输入字符个数。
*
* @authorXuShaoJie
* @version 2012-08-30
*/
public class TextWatcherActivity extends Activity {
private TextView textView;
private EditText editText;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textview);
editText = (EditText) findViewById(R.id.edittext);
editText.addTextChangedListener(textWatcher);
}
/**
* TextWatcher:接口,继承它要实现其三个方法,分别为Text改变之前、改变的过程中、改变之后各自发生的动作
*/
TextWatcher textWatcher = new TextWatcher() {
private CharSequence charSequence;
private int editStart;
private int editEnd;
@Override
public void beforeTextChanged(CharSequence s, int arg1, int arg2,
int arg3) {
charSequence = s;
}
@Override
public void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {
// 让TextView一直跟随EditText输入的内容同步显示
textView.setText(s);
}
@Override
public void afterTextChanged(Editable s) {
// 输入的时候,只有一个光标,那么这两个值应该是相等的。。。
editStart = editText.getSelectionStart();
editEnd = editText.getSelectionEnd();
// 限定EditText只能输入10个数字,并且达到10个的时候用红色显示
if (charSequence.length() > 10) {
Toast.makeText(TextWatcherActivity.this, "你输入的字数已经超过了限制!",
Toast.LENGTH_SHORT).show();
// 默认光标在最前端,所以当输入第11个数字的时候,删掉(光标位置从11-1到11)的数字,这样就无法输入超过10个以后的数字
s.delete(editStart - 1, editEnd);
// 当输入超过第10个数字的时候,改变字体颜色为红色
editText.setTextColor(Color.RED);
}
}
};
}
布局文件:main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/input_number"
android:textSize="16sp"
android:textColor="@android :color/white" />
<EditText
android:id="@+id/edittext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="number" />
</LinearLayout>