时间:2021-05-20
有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能。同时要具备手机格式化的功能。下拉列表最后一行是有个清除历史的功能。可是点击“清除历史”却把文字要设置进去AutoCompleteTextView中。这样的效果显然很糟糕。所以我就写了这样一个简单的demo。来帮助遇到这种问题的朋友解决这样一个问题。二话不多说直接上代码。
布局文件(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);// 设置输入一个字符就提示 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);}/*** 手机号格式化代码* * @param editText* EditText对象*/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; // 手机号格式化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);}}});}/*** 判断字符串是否是数字* * @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 实现手机号格式化附带清空历史的操作,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
手机格式化是对手机中存储的数据文件进行清除,保存在手机中的应用、文档、图片都将被清空,在格式化后手机将恢复为出厂默认状态。手机格式化不会影响到手机硬件本身,不会
附加一个utils对象,内含一个校验手机号函数,一个格式化返回数据函数varisChinaMobile=/^134[0-8]\d{7}$|^(?:13[
d盘格式化能恢复数据。具体规则是: 1、快速格式化D盘且格式化之后未写入数据。因为快速格式化操作耗时短,很多用户一般采用这种格式化操作。在这种情况下,使用数据
注意事项 出厂设置后安装的软件全部清空。 恢复出厂后相当于电脑重新刷系统,速度相当于新手机。 最好不要格式化SD卡,格式化后数据估计是恢复不了的。慎重!!
很多人刚开始使用荣耀8青春版手机,要格式化内存的时候找不到格式化的选项,这里为大家提供下操作步骤。荣耀8青春版恢复出厂设置教程首先,找到手机的“设置