Android在EditText中只能輸入中文或者指定類型的內容

之前做過一個需求,在EditText中只能輸入中文或者英文字符不能輸入特殊字符和數字等一些其他內容,查閱了一些資料,需要重寫一下EditText中的相關方法就可以完成該功能.總結一下,方便之後使用. 看一下效果圖:

效果圖


可以看到在EditText中只能輸入中文,不能輸入其他內容. 完成這個功能首先我們要自己寫一個LimitEditText繼承自EditText,然後去重寫onCreateInputConnection方法,在該方法中,我們需要自己設置一下內容限制,所以新建一個mInputConnecttion類繼承自InputConnectionWrapper重寫commitText方法來對輸入的內容進行限制. 代碼如下:

package com.example.junweiliu.medittext;

import android.content.Context;
import android.util.AttributeSet;
import android.view.KeyEvent;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
import android.view.inputmethod.InputConnectionWrapper;
import android.widget.EditText;


public class LimitEditText extends EditText {


    public LimitEditText(Context context) {
        super(context);
    }

    public LimitEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public LimitEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    /**
     * 輸入法
     * @param outAttrs
     * @return
     */
    @Override
    public InputConnection onCreateInputConnection(EditorInfo outAttrs) {
        return new mInputConnecttion(super.onCreateInputConnection(outAttrs),
                false);
    }
}

class mInputConnecttion extends InputConnectionWrapper implements
        InputConnection {

    public mInputConnecttion(InputConnection target, boolean mutable) {
        super(target, mutable);
    }

    /**
     * 對輸入的內容進行攔截
     *
     * @param text
     * @param newCursorPosition
     * @return
     */
    @Override
    public boolean commitText(CharSequence text, int newCursorPosition) {
        // 只能輸入漢字
        if (!text.toString().matches("[\u4e00-\u9fa5]+")) {
            return false;
        }
        return super.commitText(text, newCursorPosition);
    }

    @Override
    public boolean sendKeyEvent(KeyEvent event) {
        return super.sendKeyEvent(event);
    }

    @Override
    public boolean setSelection(int start, int end) {
        return super.setSelection(start, end);
    }

}

可以看到,我們使用正則表達式,在commitText這個方法中,對輸入的內容進行限制,如果不輸入正則區間的內容,返回false,內容也就不會被顯示了.如果需求要求的是隻能是中文和英文字符的話,只需要修改commitText方法即可 代碼如下:

   /**
     * 對輸入的內容進行攔截
     *
     * @param text
     * @param newCursorPosition
     * @return
     */
    @Override
    public boolean commitText(CharSequence text, int newCursorPosition) {
        // 只能輸入漢字或者英文
        if (!text.toString().matches("[\u4e00-\u9fa5]+") && !text.toString().matches("[a-zA-Z /]+")) {
            return false;
        }
        return super.commitText(text, newCursorPosition);
    }

問題

這個方法存在一些問題,其他解決方法參考 Android限制EditText只能輸入中文或者指定內容的實現

發佈了25 篇原創文章 · 獲贊 63 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章