TextWatcher学习
< LinearLayout ? xmlns:android ="http://schemas.android.com/apk/res/android"
android:orientation ="vertical"
android:layout_width ="fill_parent"
android:layout_height ="fill_parent"
>
< TextView ? android:id ="@+id/tv"
android:layout_width ="fill_parent" ?
android:layout_height ="wrap_content" ?
android:textColor ="@android:color/white" ?
android:ellipsize ="marquee" ?
android:focusable ="true" ?
android:marqueeRepeatLimit ="marquee_forever" ?
android:focusableInTouchMode ="true" ?
android:scrollHorizontally ="true" ?
android:text ="Please input the text:"
/>
< EditText ? android:id ="@+id/ET" ?
android:layout_width ="match_parent" ?
android:layout_height ="wrap_content"
android:inputType ="number" />
</ LinearLayout >
Java代碼:
package com.android.text;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class TextWatcherDemo extends Activity {
????private TextView mTextView;
????private EditText mEditText;
???
????@Override
????public void onCreate(Bundle savedInstanceState) {
????????super.onCreate(savedInstanceState);
????????setContentView(R.layout.main);
????????mTextView = (TextView)findViewById(R.id.tv);
????????mEditText = (EditText)findViewById(R.id.ET);
????????mEditText.addTextChangedListener(mTextWatcher);
????}
????TextWatcher mTextWatcher = new TextWatcher() {
????????private CharSequence temp;
????????private int editStart ;
????????private int editEnd ;
????????@Override
????????public void beforeTextChanged(CharSequence s, int arg1, int arg2,
????????????????int arg3) {
????????????temp = s;
????????}
??????
????????@Override
????????public void onTextChanged(CharSequence s, int arg1, int arg2,
????????????????int arg3) {
????????????mTextView.setText(s);
????????}
??????
????????@Override
????????public void afterTextChanged(Editable s) {
????????????editStart = mEditText.getSelectionStart();
????????????editEnd = mEditText.getSelectionEnd();
????????????if (temp.length() > 10) {
????????????????Toast.makeText(TextWatcherDemo.this,
????????????????????????"你輸入的字數已經超過了限制!", Toast.LENGTH_SHORT)
????????????????????????.show();
????????????????s.delete(editStart-1, editEnd);
????????????????int tempSelection = editStart;
????????????????mEditText.setText(s);
????????????????mEditText.setSelection(tempSelection);
????????????}
????????}
????};
}
(2)使用 TextWathcer實現EditeText和TextView同步
TextWatcher自身是一個接口,首先需要實現這個接口并覆蓋其三個方法,分別為Text改變之前,改變之后以及改變的過程中各自發生的動作相應,這里我們只需要實現EditText在文本發生改變時候讓TextView的內容跟著發生變化。
editText.addTextChangedListener(new TextWatcher(){
@Override??
public void afterTextChanged(Editable s) {??
????}??
@Override??
public void beforeTextChanged(CharSequence s,int start,int count,int after){??????
????}??
@Override??
public void onTextChanged(CharSequence s, int start, int before, int count) {??
???textView.setText(editText.getText());??
??}??
});?
Android的編輯框控件EditText在平常編程時會經常用到,有時候會對編輯框增加某些限制,如限制只能輸入數字,最大輸入的文字個數,不能輸入 一些非法字符等,這些需求有些可以使用android控件屬性直接寫在布局xml文件里,比如android:numeric="integer"(只允 許輸入數字);
???? 對于一些需求,如非法字符限制(例如不允許輸入#號,如果輸入了#給出錯誤提示),做成動態判斷更方便一些,而且容易擴展;
???? 在Android里使用TextWatcher接口可以很方便的對EditText進行監聽;TextWatcher中有3個函數需要重載:
public void beforeTextChanged(CharSequence s, int start, int count, int after); public void onTextChanged(CharSequence s, int start, int before, int count); public void afterTextChanged(Editable s);?????從函數名就可以知道其意思,每當敲擊鍵盤編輯框的文字改變時,上面的三個函數都會執行,beforeTextChanged可以給出變化之前的內容,onTextChanged和afterTextChanged給出追加上新的字符之后的文本;
所以對字符的限制判斷可以在afterTextChanged函數中進行,如果檢查到新追加的字符為認定的非法字符,則在這里將其delete掉,那么他就不會顯示在編輯框里了:
private final TextWatcher mTextWatcher = new TextWatcher() {?
public void beforeTextChanged(CharSequence s, int start, int count, int after) { }?
public void onTextChanged(CharSequence s, int start, int before, int count) { }?
public void afterTextChanged(Editable s) {
?if (s.length() > 0) { int pos = s.length() - 1; char c = s.charAt(pos); if (c == '#') {//這里限制在字串最后追加# s.delete(pos,pos+1); Toast.makeText(MyActivity.this, "Error letter.",Toast.LENGTH_SHORT).show(); }
?} }};
? ? ?注冊監聽:
EditText mEditor = (EditText)findViewById(R.id.editor_input);?mEditor.addTextChangedListener(mTextWatcher);
轉載地址:http://czhjchina.blog.163.com/blog/static/2002790472012220113455325/
總結
以上是生活随笔為你收集整理的TextWatcher学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 晶闸管简单介绍
- 下一篇: 马士兵oracle视频教程笔记