1. 程式人生 > >Android學習筆記 —— Android 開發中,限制 EditText 輸入框不能輸入中文(漢字)

Android學習筆記 —— Android 開發中,限制 EditText 輸入框不能輸入中文(漢字)

今天在練習開發一個小專案的時候,需要限制 EditText 輸入框不能輸入中文(漢字),在網上找了很多例子,

 結合自己的實際,終於完成了這一功能。現在把程式碼記錄下來,方便以後查詢!

首先是xml佈局檔案,這個比較簡單!就一個簡單的 EditText;

activity_csdn.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:gravity="center"
        android:textSize="20sp"
        android:text="輸入框限制輸入中文"/>

    <EditText
        android:id="@+id/csdnText"
        android:layout_width="match_parent"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="20dp"
        android:layout_marginRight="20dp"
        android:layout_height="50dp" />

</LinearLayout>
接下來的是java程式碼檔案;

CsdnActivity.java

package com.liyu.logistic.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

import com.liyu.logistic.R;

/**
 * Created by Administration on 2018/1/29.
 */

public class CsdnActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_csdn);

        EditText csdnText = (EditText) findViewById(R.id.csdnText);
        csdnText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() > 0) {
                    for (int i = 0; i < s.length(); i++) {
                        char c = s.charAt(i);
                        if (c >= 0x4e00 && c <= 0X9fff) { // 根據位元組碼判斷
                            // 如果是中文,則清除輸入的字元,否則保留
                            s.delete(i,i+1);
                        }
                    }
                }
            }
        });
    }
}
 限制 EditText 輸入中文的功能就這樣實現了,接下來的就是效果圖了:


 當然了,如果需要限制輸入的 EditText 比較多的時候也可以把方法封裝起來使用,程式碼過程如下:

先建立一個類存放該方法:

package com.liyu.logistic.utils;

import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

/**
 * 限定只能輸入一個小數點且只能輸入兩個小數
 * Created by Administration on 2017/12/7.
 */

public class TextChangedListener {

    // 限制輸入框不能輸入漢字
    public static void StringWatcher(final EditText editText){
        editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            }
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }
            @Override
            public void afterTextChanged(Editable s) {
                if (s.length() > 0) {
                    for (int i = 0; i < s.length(); i++) {
                        char c = s.charAt(i);
                        if (c >= 0x4e00 && c <= 0X9fff) {
                            s.delete(i,i+1);
                        }
                    }
                }
            }
        });
    }
}
 然後在CsdnActivity中呼叫該方法就OK了,
package com.liyu.logistic.activity;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.EditText;

import com.liyu.logistic.R;
import com.liyu.logistic.utils.TextChangedListener;

/**
 * Created by Administration on 2018/1/29.
 */

public class CsdnActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_csdn);

        EditText csdnText = (EditText) findViewById(R.id.csdnText);
        TextChangedListener.StringWatcher(csdnText);
    }
}
 這次的記錄完成了,哈哈!


 轉載請註明出處:http://mp.blog.csdn.net/postedit/79200024!