Android自定義view實(shí)現(xiàn)輸入控件
本文實(shí)例為大家分享了Android自定義view實(shí)現(xiàn)輸入控件的具體代碼,供大家參考,具體內(nèi)容如下

網(wǎng)絡(luò)上大部分的輸入控件都是多個(gè)EditText組合而成,本例中采用的是:
- 單個(gè)EditText作為輸入的捕捉控件
- 多個(gè)ImageView的子類作為顯示的控件,繪制EditText中的數(shù)據(jù)
如上圖:
- 輸入前和輸入后輸入框需要發(fā)生響應(yīng)的改變
- 點(diǎn)擊自定義控件要彈出軟鍵盤
- EditText數(shù)據(jù)捕捉,以及EditView不能操作(如果可以操作,數(shù)據(jù)處理會(huì)混亂)
- 輸完后會(huì)得到相應(yīng)的提示
- ImageView的子類可以設(shè)置寬高,字體大小顏色,以及兩個(gè)View之間的間隔
那么代碼走起:
首先是ImageView的子類TextImageView,onDraw的實(shí)現(xiàn)也很簡(jiǎn)單,就是判斷text是否長度大于0,如果大于0則繪制文字,還有一些細(xì)節(jié)處理就是設(shè)置字體顏色,字體大寫,獲取字體的寬高
@Override
protected void onDraw(Canvas canvas) {
if (text.length() > 0) {
if (isDrawSrc) {
super.onDraw(canvas);
}
canvas.drawText(text, 0, text.length(), (getMeasuredWidth() - textWidth) / 2, (getMeasuredHeight() + dy) / 2, textPaint);
} else {
super.onDraw(canvas);
}
}
其次PasswordView是一個(gè)自定義ViewGroup,引入了一個(gè)布局,布局中就是一個(gè)EditText(數(shù)據(jù)捕捉)和一個(gè)Linearlayout(代碼添加TextImageView)。EditText的寬高是1dp和0dp(避免用戶可以操作EditText);給Linearlayout設(shè)置divider屬性(兩個(gè)TextImageView的間隔)
PasswordView的核心代碼如下:
- 代碼控制EditView獲取輸入
public void requestEtFocus() {
catchInput.setFocusable(true);
catchInput.setFocusableInTouchMode(true);
catchInput.setClickable(true);
catchInput.requestFocus();
showSoftKeyboard(catchInput);
catchInput.setCursorVisible(false);
catchInput.setSelection(catchInput.length());
}
// 動(dòng)態(tài)添加TextImageView
for (int i = 0; i < passwordLength; i++) {
TextImageView view = new TextImageView(context);
view.setTextSize(textSize);
view.setTextColor(textColor);
content.addView(view);
if (unInputBg != 0) {
view.setBackgroundResource(unInputBg);// 設(shè)置未輸入前的背景
}
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams((int) itemWidth, (int) itemHeight);
if (i == 0) {
params.setMargins((int) dpToPixel(1), 0, 0, 0);
}
if (i == passwordLength - 1) {
params.setMargins(0, 0, (int) dpToPixel(1), 0);
}
view.setLayoutParams(params);
views[i] = view;
// 分割字體,給TextIamgeView繪制文字
if (text != null && i < text.length()) {
setItemText(text.subSequence(i, i + 1));
}
}
// 輸入監(jiān)聽
catchInput.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) {
if (s.length() > 0) {
// index:成員變量;保存當(dāng)前的輸入了幾個(gè)字符
if (index > s.length()) {
removeItemText();// 刪除
} else {
setText(s);
if (s.length() == passwordLength) {
if (listener != null) {
// 輸入完成回調(diào)
listener.onInputCodeEnd(s);
}
}
}
} else if (s.length() == 0 && index > 0) {
removeItemText();
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
實(shí)現(xiàn)比較簡(jiǎn)單,大多都是一些細(xì)節(jié)處理,具體看源碼:PasswordView
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Android高仿微信支付密碼輸入控件
- Android自定義控件通用驗(yàn)證碼輸入框的實(shí)現(xiàn)
- Android如何禁止向EditText控件中輸入內(nèi)容詳解
- Android用戶輸入自動(dòng)提示控件AutoCompleteTextView使用方法
- Android 帶清除功能的輸入框控件實(shí)例詳解
- Android開發(fā)中給EditText控件添加TextWatcher監(jiān)聽實(shí)現(xiàn)對(duì)輸入字?jǐn)?shù)的限制(推薦)
- Android帶清除功能的輸入框控件EditTextWithDel
- Android輸入框控件ClearEditText實(shí)現(xiàn)清除功能
- Android WebView控件捕獲用戶輸入的信息
- Android實(shí)現(xiàn)EditText控件禁止輸入內(nèi)容的方法(附測(cè)試demo)
相關(guān)文章
Android程序開發(fā)之防止密碼輸入錯(cuò)誤 密碼明文顯示功能
在使用App的時(shí)候,首次登錄都需要用戶輸入密碼的,有些朋友為了安全起見密碼設(shè)置的比較長,導(dǎo)致很多次密碼都輸入錯(cuò)誤,嚴(yán)重影響了用戶體驗(yàn)效果,下面通過本文給大家介紹Android程序開發(fā)之防止密碼輸入錯(cuò)誤 密碼明文顯示功能,需要的朋友參考下2016-02-02
Android利用反射機(jī)制調(diào)用截屏方法和獲取屏幕寬高的方法
這篇文章主要介紹了Android利用反射機(jī)制調(diào)用截屏方法和獲取屏幕寬高的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03
android實(shí)現(xiàn)快遞跟蹤進(jìn)度條
這篇文章主要為大家詳細(xì)介紹了android實(shí)現(xiàn)快遞跟蹤進(jìn)度條,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法
這篇文章主要介紹了Android中監(jiān)聽判斷網(wǎng)絡(luò)連接狀態(tài)的方法,介紹了是否有網(wǎng)絡(luò)連接判斷、連接的類型和監(jiān)聽網(wǎng)絡(luò)狀態(tài)的方法,需要的朋友可以參考下2014-06-06
android自定義開關(guān)控件-SlideSwitch的實(shí)例
本篇文章主要介紹了android自定義開關(guān)控件-SlideSwitch的實(shí)例,實(shí)現(xiàn)了手機(jī)控件開關(guān)的功能,感興趣的小伙伴們可以參考一下。2016-11-11

