日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TextWatcher学习

發布時間:2023/12/9 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TextWatcher学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<? xml version="1.0" encoding="utf-8" ?>
< 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());??
??}??
});?

可以看出TextWatcher是專門用來監聽文本變化的,正因為它的這個技能,正是我們實現同步的功能所需要的





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学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。