Android手機(jī)號(hào)碼輸入框(滿11位自動(dòng)跳到下個(gè)輸入框)實(shí)例代碼
廢話不多說(shuō)了,直接給大家貼代碼了,具體代碼如下所示:
package com.jixiong.teen.view;
import android.content.Context;
import android.text.Editable;
import android.text.Selection;
import android.text.TextWatcher;
import android.util.AttributeSet;
import android.widget.EditText;
/**
* Created by christy on 16/12/22.
*/
public class MoblieEditText extends EditText {
public MoblieEditText(Context context) {
super(context);
this.addTextChangedListener(new MoblieWatcher());
}
public MoblieEditText(Context context, AttributeSet attrs) {
super(context, attrs);
this.addTextChangedListener(new MoblieWatcher());
}
public MoblieEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
this.addTextChangedListener(new MoblieWatcher());
}
class MoblieWatcher implements TextWatcher {
int beforeTextLength = 0;
int onTextLength = 0;
boolean isChanged = false;
int location = 0;// 記錄光標(biāo)的位置
private char[] tempChar;
private final StringBuffer buffer = new StringBuffer();
int konggeNumberB = 0;
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
beforeTextLength = s.length();
if (buffer.length() > 0) {
buffer.delete(0, buffer.length());
}
konggeNumberB = 0;
for (int i = 0; i < s.length(); i++) {
if (s.charAt(i) == ' ') {
konggeNumberB++;
}
}
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
onTextLength = s.length();
buffer.append(s.toString());
if (onTextLength == beforeTextLength || onTextLength <= 3 || isChanged) {
isChanged = false;
return;
}
isChanged = true;
}
@Override
public void afterTextChanged(Editable s) {
if (isChanged) {
location = getSelectionEnd();
int index = 0;
while (index < buffer.length()) {
if (buffer.charAt(index) == ' ') {
buffer.deleteCharAt(index);
} else {
index++;
}
}
index = 0;
int konggeNumberC = 0;
while (index < buffer.length()) {
if ((index == 3 || index == 8)) {
buffer.insert(index, ' ');
konggeNumberC++;
}
index++;
}
if (konggeNumberC > konggeNumberB) {
location += (konggeNumberC - konggeNumberB);
}
tempChar = new char[buffer.length()];
buffer.getChars(0, buffer.length(), tempChar, 0);
String str = buffer.toString();
if (location > str.length()) {
location = str.length();
} else if (location < 0) {
location = 0;
}
setText(str);
Editable etable = getText();
Selection.setSelection(etable, location);
isChanged = false;
}
}
}
}
使用;;
直接在布局中引用
<com.jixiong.teen.view.MoblieEditText android:id="@+id/etUserNums" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@null" android:hint="@string/user_name" android:inputType="number" android:maxLines="1" android:paddingLeft="@dimen/margin_twenty" android:singleLine="true" android:textColorHint="@color/hint_color" android:textSize="@dimen/sp_14" />
然后再activity中初始化
etUserNums.addTextChangedListener(new TeenEmptyWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (s != null && s.length() == 13) {
if (etUserNums.isFocused()) {
etUserNums.clearFocus();
etUserPwd.requestFocus();
}
}
}
});
總結(jié)
以上所述是小編給大家介紹的Android手機(jī)號(hào)碼輸入框(滿11位自動(dòng)跳到下個(gè)輸入框)實(shí)例代碼,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
Android的ListView多選刪除操作實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了Android的ListView多選刪除操作實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-05-05
Android FTP服務(wù)器上傳文件攻略(代碼詳解)
這篇文章主要介紹了Android FTP服務(wù)器上傳文件攻略,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06
Android監(jiān)聽系統(tǒng)來(lái)電并彈出提示窗口
本篇文章主要介紹了Android監(jiān)聽系統(tǒng)來(lái)電并彈出提示窗口,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10
Android BroadcastReceiver廣播機(jī)制概述
這篇文章主要為大家詳細(xì)介紹了Android BroadcastReceiver廣播機(jī)制,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-08-08
Android ViewPager循環(huán)播放廣告實(shí)例詳解
這篇文章主要介紹了Android ViewPager循環(huán)播放廣告條實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
利用Android實(shí)現(xiàn)一種點(diǎn)贊動(dòng)畫效果的全過(guò)程
最近做項(xiàng)目需要實(shí)現(xiàn)點(diǎn)贊動(dòng)畫,下面這篇文章主要給大家介紹了關(guān)于利用Android實(shí)現(xiàn)一種點(diǎn)贊動(dòng)畫效果的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-12-12
Android內(nèi)置SQLite的使用詳細(xì)介紹
這篇文章主要介紹了Android內(nèi)置SQLite的使用詳細(xì)介紹,文章通過(guò)文章展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
Android App使用SQLite數(shù)據(jù)庫(kù)的一些要點(diǎn)總結(jié)
這篇文章主要介紹了Android App使用SQLite數(shù)據(jù)庫(kù)的一些要點(diǎn)總結(jié),使用Sqlite作為應(yīng)用的嵌入式數(shù)據(jù)庫(kù)非常輕便,需要的朋友可以參考下2016-03-03
SimpleCommand框架ImageLoader API詳解(三)
這篇文章主要為大家詳細(xì)介紹了SimpleCommand框架ImageLoader API,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10
android應(yīng)用實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)方法
這篇文章主要介紹了android應(yīng)用實(shí)現(xiàn)開機(jī)自動(dòng)啟動(dòng)方法,本文講解了原理和編碼實(shí)例,需要的朋友可以參考下2015-05-05

