一、文本框动态跟随显示输入以及控制字数

在编写代码的时候,如果需要让文本框能够跟随编辑框输入的内容而显示出来的话,可以使用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去观察输入框中输入的内容来限制输入字符个数。 *  * @author XuShaoJie * @version 2012-08-30 */public class TextWatcherActivity extends Activity {private TextView textView;private EditText editText;@Overridepublic 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;@Overridepublic void beforeTextChanged(CharSequence s, int arg1, int arg2,int arg3) {charSequence = s;}@Overridepublic void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {// 让TextView一直跟随EditText输入的内容同步显示textView.setText(s);}@Overridepublic 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);}}};}

布局文件:

<?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>



二、输入验证码

举个例子,有两个编辑框,第一个用于输入手机号码获取验证码,当手机收到验证码后,点击提交按钮,出现验证码输入框,允许用户输入验证码。

通过使用TextWatcher,可以很轻松的实现,具体看截图:

当第一个编辑框输入的手机号码符合要求后,提交按钮生效,但是此时第二个编辑框仍然不能输入:

点击提交按钮,第二个输入框恢复有效状态,此时可以输入验证码:

java代码:

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.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;/** * EditText在布局中经常用到,对EditText中输入的内容也经常需要进行限制, * 可以通过TextWatcher去观察输入框中输入的内容来限制输入字符个数。 *  * @author XuShaoJie * @version 2012-08-31 */public class TextWatcherActivity extends Activity {private TextView textView;private EditText editText;private EditText editText2;private Button button;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);textView = (TextView) findViewById(R.id.textview);editText = (EditText) findViewById(R.id.edittext);editText2 = (EditText) findViewById(R.id.edittext2);button = (Button) findViewById(R.id.button);button.setOnClickListener(buttonListener);// 开始前设置editText2和button状态为不可用editText2.setEnabled(false);button.setEnabled(false);editText.addTextChangedListener(textWatcher);}// "提交"按钮:点击后让editText2从隐藏和不可用状态恢复为可用状态OnClickListener buttonListener = new OnClickListener() {@Overridepublic void onClick(View v) {editText2.setEnabled(true);}};/** * TextWatcher:接口,继承它要实现其三个方法,分别为Text改变之前、改变的过程中、改变之后各自发生的动作 */TextWatcher textWatcher = new TextWatcher() {private CharSequence charSequence;private int editStart;private int editEnd;@Overridepublic void beforeTextChanged(CharSequence s, int arg1, int arg2,int arg3) {charSequence = s;}@Overridepublic void onTextChanged(CharSequence s, int arg1, int arg2, int arg3) {// 让TextView一直跟随EditText输入的内容同步显示textView.setText(s);}@Overridepublic 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();// 默认光标在最前端,所以当输入第12个数字的时候,删掉(光标位置从12-1到12)的数字,这样就无法输入超过11个以后的数字s.delete(editStart - 1, editEnd);// 当输入超过第11个数字的时候,改变字体颜色为红色editText.setTextColor(Color.RED);// 使button恢复为可用状态button.setEnabled(true);}}};}

布局文件:

 <?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:textColor="@android:color/white"        android:textSize="16sp" />    <EditText        android:id="@+id/edittext"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="@string/edit1_hint"        android:inputType="number" />    <Button        android:id="@+id/button"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="right"        android:text="@string/input_button"        android:textColor="@android:color/black" />    <EditText        android:id="@+id/edittext2"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:hint="@string/edit2_hint" /></LinearLayout>

更多相关文章

  1. 【Android】 桌面图标右上角显示数字(角标)
  2. UBUNTU LINUX中连接ANDROID真机调试
  3. 在android 2.3 AVD 模拟器上安装 google market 安卓市场
  4. 【2020】Android轮子,99个可以直接拿来用的代码片段(持续更新)
  5. EditText_XML属性
  6. 在Android中创建一种新的输入法
  7. Android(安卓)Camera Hal 的初步实现1
  8. php脚本生成google play url的下载链接,下载apk并自动反编译后获
  9. android studio 获取SHA1(指纹)

随机推荐

  1. android和html交互--动态注入方法
  2. Android(安卓)程序员指南 PDF下载
  3. android中usb数据通信速率慢问题解决办法
  4. Android(安卓)Studio编译release版本
  5. Android截屏实现——亲测有效代码
  6. Eclipse环境下格式化Android的代码风格
  7. android 中的 Handler Thread Runnable
  8. java第四次实验
  9. Android(安卓)ImageView的scaleType属性
  10. Android(安卓)Duplicate files copied in