PhoneEditText:EditText輸入手機(jī)號(hào)中間自動(dòng)加入空格

android輸入框有時(shí)候需要添加各種各樣的限制條件,僅僅限制長(zhǎng)度的屬性(maxLength)或方法(length())是不能滿足我們的需求的,如你需要這個(gè)輸入框要求只能輸入數(shù)字或字母又或者是大小寫字母之類的,這時(shí)候可以用setFilters。

image.png

自定義PhoneEditText

package com.zly.demo10.widget;

import android.content.Context;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.util.Log;

import androidx.appcompat.widget.AppCompatEditText;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * EditText輸入手機(jī)號(hào)中間自動(dòng)加入空格
 * <p>
 * 178 1731 8855
 */
public class PhoneEditText extends AppCompatEditText implements TextWatcher {

    /***
     * 特殊下標(biāo)位置
     */
    private static final int PHONE_INDEX_3 = 3;
    private static final int PHONE_INDEX_4 = 4;
    private static final int PHONE_INDEX_8 = 8;
    private static final int PHONE_INDEX_9 = 9;

    public PhoneEditText(Context context) {
        super(context);
        initView();
    }

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

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

    private void initView() {

        /**
         * android輸入框有時(shí)候需要添加各種各樣的限制條件,僅僅限制長(zhǎng)度的屬性(maxLength)或方法(length())是不能滿足我們的需求的,
         * 如你需要這個(gè)輸入框要求只能輸入數(shù)字或字母又或者是大小寫字母之類的,這時(shí)候可以用setFilters
         */

        //輸入框的長(zhǎng)度不能超過(guò)13
        setFilters(new InputFilter[]{new InputFilter.LengthFilter(13), new InputFilter() {

            @Override
            public CharSequence filter(CharSequence source, int start, int end, Spanned spanned, int dstart, int dend) {
                if (" ".equals(source.toString()) || source.toString().contentEquals("\n") || dstart == 13) {
                    return "";  //返回空字符串,就代表匹配不成功
                } else {
                    return null;  //返回null代表匹配成功
                }
            }
        }
        });
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        super.onTextChanged(s, start, before, count);
        if (s == null || s.length() == 0) {
            return;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < s.length(); i++) {
            if (i != PHONE_INDEX_3 && i != PHONE_INDEX_8 && s.charAt(i) == ' ') {
                continue;
            } else {
                sb.append(s.charAt(i));
                //是否為空位符的位置
                boolean isBlankPos = (sb.length() == PHONE_INDEX_4 || sb.length() == PHONE_INDEX_9) && sb.charAt(sb.length() - 1) != ' ';
                if (isBlankPos) {
                    sb.insert(sb.length() - 1, ' ');
                }
            }
        }

        if (!sb.toString().equals(s.toString())) {
            int index = start + 1;
            if (sb.charAt(start) == ' ') {
                if (before == 0) {
                    index++;
                } else {
                    index--;
                }
            } else {
                if (before == 1) {
                    index--;
                }
            }

            setText(sb.toString());
            setSelection(index);
        }
    }

    @Override
    public void afterTextChanged(Editable s) {

    }

    /***
     * 獲得不包含空格的手機(jī)號(hào)
     */
    public String getPhoneText() {
        String str = getText().toString();
        return replaceBlank(str);
    }

    private String replaceBlank(String str) {
        String dest = "";
        if (str != null) {
            Pattern p = Pattern.compile("\\s*|\t|\r|\n");
            Matcher m = p.matcher(str);
            if (m.find()) {
                dest = m.replaceAll("");
            }
        }
        return dest;
    }
}

使用

    <com.zly.demo10.widget.PhoneEditText
        android:id="@+id/et_phone"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_marginTop="20dp"
        android:hint="請(qǐng)輸入手機(jī)號(hào)"
        android:imeOptions="actionNext"
        android:inputType="phone"
        android:textColor="@color/black"
        android:textSize="16sp" />
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容