android studio版本21.2.1
例程:LimitInputText
完成日期:2022.12.1
其实这人不是我写的,之前在用到这个的时候在网上找的,本来想转载,但当时没写,再想写的时候发现找不到了,不好意见,剽窃人家劳动成果,如果原作者看到了请联系我,我再改。
我之前在学习Python的时候“努力”学习过正则表达式,功能非常强大,但很难学,很难记。这次又碰到了,很多东西想不起来了,拿过来用吧。我对他这个方法理解不深,只能照写,也算备忘。
建立项目的事就不讲了,只把代码贴出来。
新建空白布局项目。
新建一个类LimitInputTextWatcher:
- package com.example.limitinputtext;
-
- import android.text.Editable;
- import android.text.TextWatcher;
- import android.widget.EditText;
-
- public class LimitInputTextWatcher implements TextWatcher {
-
- private EditText et = null;
-
- private String regex;
- // 默认的筛选条件(正则:只能输入中文)
- private String DEFAULT_REGEX = "[^\u4E00-\u9FA5]";
-
- //下面只可输入 数字、大小写字母和汉字.特殊字符不行.
- //private String DEFAULT_REGEX = "[^a-zA-Z0-9\u4E00-\u9FA5]";
-
- // 构造方法
- public LimitInputTextWatcher(EditText et) {
- this.et = et;
- this.regex = DEFAULT_REGEX;
- }
-
- //构造方法
- public LimitInputTextWatcher(EditText et, String regex) {
- this.et = et;
- this.regex = regex;
- }
-
- @Override
- public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
-
- }
-
- @Override
- public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
-
- }
-
- @Override
- public void afterTextChanged(Editable editable) {
- String str = editable.toString();
- String inputStr = clearLimitStr(regex, str);
- et.removeTextChangedListener(this);
- // et.setText方法可能会引起键盘变化,所以用editable.replace来显示内容
- editable.replace(0, editable.length(), inputStr.trim());
- et.addTextChangedListener(this);
- }
-
- // 清除不符合条件的内容
- private String clearLimitStr(String regex, String str) {
- return str.replaceAll(regex, "");
- }
- }
在布局里面入一个edittext控件。activity_main.xml文件内容:
- "1.0" encoding="utf-8"?>
- <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context=".MainActivity">
-
- <EditText
- android:id="@+id/editTextTextPersonName"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:ems="10"
- android:inputType="textPersonName"
- android:minHeight="48dp"
- android:text="内容"
- android:textSize="20sp"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintHorizontal_bias="0.497"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintVertical_bias="0.597" />
- androidx.constraintlayout.widget.ConstraintLayout>
mainactivity.java内容:
- package com.example.limitinputtext;
-
- import androidx.appcompat.app.AppCompatActivity;
-
- import android.os.Bundle;
- import android.widget.EditText;
-
- public class MainActivity extends AppCompatActivity {
- private EditText inputText;
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- inputText=(EditText)findViewById(R.id.editTextTextPersonName);
- inputText.addTextChangedListener(new LimitInputTextWatcher(inputText));
- }
- }
这样这个文本输入框内就只能输入汉字,输入其他任何字符文本框都不认。