Android中使用 AutoCompleteTextView 實(shí)現(xiàn)手機(jī)號(hào)格式化附帶清空歷史的操作
有個(gè)小伙伴遇到了這樣一個(gè)問題,就是AutoCompleteTextView實(shí)現(xiàn)自動(dòng)填充的功能。同時(shí)要具備手機(jī)格式化的功能。下拉列表最后一行是有個(gè)清除歷史的功能??墒屈c(diǎn)擊“清除歷史”卻把文字要設(shè)置進(jìn)去AutoCompleteTextView中。這樣的效果顯然很糟糕。所以我就寫了這樣一個(gè)簡(jiǎn)單的demo。來幫助遇到這種問題的朋友解決這樣一個(gè)問題。二話不多說直接上代碼。
布局文件(activity_main.xml)代碼如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Please input:" /> <AutoCompleteTextView android:id="@+id/actv" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout>
java文件(MainActivity.java)代碼如下:
import android.app.Activity; import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.text.TextWatcher; import android.view.View; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private AutoCompleteTextView mAutoCompleteTextView; private String[] mAutoStrs = new String[] { "138 0013 8000", "13800138001", "13800138002", "13800138003", "13800138004", "138 0013 800清除記錄" }; private String mBeforeTextChangedStr = ""; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.actv); ArrayAdapter<String> _arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, mAutoStrs); mAutoCompleteTextView.setAdapter(_arrayAdapter); mAutoCompleteTextView.setThreshold(1);// 設(shè)置輸入一個(gè)字符就提示 mAutoCompleteTextView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { String _clearStr = ""; if (arg1 instanceof TextView) { _clearStr = ((TextView) arg1).getText().toString(); } if (_clearStr.equals("138 0013 800清楚記錄")) { mAutoCompleteTextView.setText(mBeforeTextChangedStr); Editable _editable = mAutoCompleteTextView.getText(); Selection.setSelection(_editable, _editable.length()); Toast.makeText(MainActivity.this, "清除成功了!", Toast.LENGTH_LONG).show(); } } }); phoneNumAddSpaceOne(mAutoCompleteTextView); } /** * 手機(jī)號(hào)格式化代碼 * * @param editText * EditText對(duì)象 */ public void phoneNumAddSpaceOne(final EditText editText) { editText.addTextChangedListener(new TextWatcher() { private int start; private int before; private StringBuilder stringBuilder; @Override public void onTextChanged(CharSequence s, int start, int before, int count) { this.start = start; this.before = before; } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { String _str = s.toString(); if (!isNumeric(_str.replace(" ", ""))) { return; } mBeforeTextChangedStr = _str; // 手機(jī)號(hào)格式化xxx xxxx xxxx if (s == null || s.length() == 0) return; if (stringBuilder == null) { stringBuilder = new StringBuilder(); } else { stringBuilder.delete(0, stringBuilder.length()); } for (int i = 0; i < s.length(); i++) { if (i != 3 && i != 8 && s.charAt(i) == ' ') { continue; } else { stringBuilder.append(s.charAt(i)); if ((stringBuilder.length() == 4 || stringBuilder .length() == 9)&& stringBuilder.charAt(stringBuilder.length() - 1) != ' ') { stringBuilder.insert(stringBuilder.length() - 1,' '); } } } if (!stringBuilder.toString().equals(s.toString())) { int index = start + 1; if (stringBuilder.charAt(start) == ' ') { if (before == 0) { index++; } else { index--; } } else { if (before == 1) { index--; } } editText.setText(stringBuilder.toString()); editText.setSelection(index); } } }); } /** * 判斷字符串是否是數(shù)字 * * @param str * 需要判斷的字符串 * @return */ public boolean isNumeric(String str) { for (int i = str.length(); --i >= 0;) { int chr = str.charAt(i); if (chr < 48 || chr > 57) return false; } return true; } }
以上所述是小編給大家介紹的Android中使用 AutoCompleteTextView 實(shí)現(xiàn)手機(jī)號(hào)格式化附帶清空歷史的操作,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android自定義流式布局實(shí)現(xiàn)淘寶搜索記錄
- Android本地實(shí)現(xiàn)搜索歷史記錄
- Android實(shí)現(xiàn)搜索保存歷史記錄功能
- Android流式布局實(shí)現(xiàn)歷史搜索記錄功能
- Android項(xiàng)目類似淘寶 電商 搜索功能,監(jiān)聽軟鍵盤搜索事件,延遲自動(dòng)搜索,以及時(shí)間排序的搜索歷史記錄的實(shí)現(xiàn)
- Android實(shí)現(xiàn)搜索功能并本地保存搜索歷史記錄
- Android實(shí)現(xiàn)簡(jiǎn)易計(jì)步器功能隔天步數(shù)清零查看歷史運(yùn)動(dòng)紀(jì)錄
- android中AutoCompleteTextView的簡(jiǎn)單用法(實(shí)現(xiàn)搜索歷史)
- Android實(shí)現(xiàn)搜索歷史功能
- Android實(shí)現(xiàn)歷史搜索記錄
相關(guān)文章
Android利用繪制緩沖實(shí)現(xiàn)代碼雨效果
看過很多代碼雨的前端實(shí)現(xiàn),卻很少看到過Android代碼雨效果的實(shí)現(xiàn),當(dāng)然 open gl es的實(shí)現(xiàn)是有的,一個(gè)主要的原因是,在Android Canvas繪制時(shí),很少有人考慮使用繪制緩沖,所以本文將給大家介紹Android如何利用繪制緩沖實(shí)現(xiàn)代碼雨效果,需要的朋友可以參考下2024-03-03完美解決android 項(xiàng)目jar包沖突的問題
這篇文章主要介紹了完美解決android 項(xiàng)目jar包沖突的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-03-03Android ViewGroup事件分發(fā)和處理源碼分析
這篇文章主要為大家介紹了Android ViewGroup事件分發(fā)和處理源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-02-02Android 滾動(dòng)時(shí)間選擇的示例代碼
這篇文章主要介紹了Android 滾動(dòng)時(shí)間選擇的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Android開發(fā)基于Drawable實(shí)現(xiàn)圓角矩形的方法
這篇文章主要介紹了Android開發(fā)基于Drawable實(shí)現(xiàn)圓角矩形的方法,結(jié)合實(shí)例形式分析了Drawable的功能、相關(guān)圖形繪制函數(shù)與使用方法,需要的朋友可以參考下2017-10-10Android開發(fā)之獲取LayoutInflater對(duì)象的方法總結(jié)
這篇文章主要介紹了Android開發(fā)之獲取LayoutInflater對(duì)象的方法,結(jié)合實(shí)例形式總結(jié)分析了Android獲取LayoutInflater對(duì)象的常用技巧,需要的朋友可以參考下2016-02-02Android?Activity共享元素動(dòng)畫示例解析
這篇文章主要為大家介紹了Android?Activity共享元素動(dòng)畫示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09