有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能。同时要具备手机格式化的功能。接下来通过本文给大家分享使用 AutoCompleteTextView 实现手机号格式化附带清空历史的操作方法,需要的朋友参考下 在Android开发中,`AutoCompleteTextView` 是一个非常实用的组件,它允许用户在输入时自动显示匹配的建议列表。这个组件通常用于提高输入效率,比如在输入手机号、地址等时提供快速选择。在本例中,我们将探讨如何在`AutoCompleteTextView`中实现手机号的格式化,并添加一个功能来清除历史数据。 我们需要创建一个布局文件,包含一个`AutoCompleteTextView`。在`activity_main.xml`中,可以看到一个简单的线性布局,其中包含一个`TextView`和一个`AutoCompleteTextView`: ```xml <LinearLayout 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代码中,我们需要初始化`AutoCompleteTextView`并设置数据源。在`MainActivity.java`中,我们创建了一个字符串数组`mAutoStrs`,包含了几个示例手机号以及一个特殊项“清除记录”。接着,我们创建了一个`ArrayAdapter`并将数据源绑定到`AutoCompleteTextView`: ```java AutoCompleteTextView mAutoCompleteTextView; String[] mAutoStrs = {"138 0013 8000", "13800138001", "13800138002", "13800138003", "13800138004", "138 0013 800清除记录"}; ArrayAdapter<String> _arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, mAutoStrs); mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.actv); mAutoCompleteTextView.setAdapter(_arrayAdapter); ``` 为了实现手机号的格式化,我们需要监听文本变化,即在用户输入时实时更新显示的格式。我们可以添加一个`TextWatcher`,在`afterTextChanged()`方法中处理格式化: ```java mAutoCompleteTextView.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { mBeforeTextChangedStr = s.toString(); } @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override public void afterTextChanged(Editable s) { String text = s.toString().replaceAll("\\D", ""); if (text.length() > 11) { text = text.substring(0, 11); } StringBuilder sb = new StringBuilder(text); for (int i = 3; i < text.length(); i += 4) { sb.insert(i, ' '); } s.replace(0, s.length(), sb.toString()); Selection.setSelection(s, s.length()); } }); ``` 这段代码将非数字字符替换为空,并在第4位和第7位插入空格,从而达到格式化手机号的效果。 至于清空历史功能,通常可以通过点击列表中的“清除记录”项来触发。我们需要监听`OnItemClickListener`,并在选择“清除记录”时清除`AutoCompleteTextView`的历史记录: ```java mAutoCompleteTextView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { if ("清除记录".equals(mAutoStrs[position])) { mAutoCompleteTextView.setText(""); // 清除历史数据,这里假设使用SharedPreferences存储历史数据 SharedPreferences prefs = getSharedPreferences("History", MODE_PRIVATE); Editor editor = prefs.edit(); editor.clear(); editor.apply(); Toast.makeText(MainActivity.this, "历史记录已清除", Toast.LENGTH_SHORT).show(); } else { mAutoCompleteTextView.setText(mAutoStrs[position]); } } }); ``` 这样,我们就实现了手机号的格式化输入和历史记录的清除功能。当用户点击“清除记录”时,不仅`AutoCompleteTextView`的文本会清空,而且之前保存的历史数据也会从`SharedPreferences`中删除。这是一个典型的Android应用中使用`AutoCompleteTextView`进行自定义操作的例子,它展示了如何结合文本监听、列表点击事件以及数据存储来扩展组件功能。
- 粉丝: 3
- 资源: 945
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- bdwptqmxgj11.zip
- onnxruntime-win-x86
- onnxruntime-win-x64-gpu-1.20.1.zip
- vs2019 c++20 语法规范 头文件 <ratio> 的源码阅读与注释,处理分数的存储,加减乘除,以及大小比较等运算
- 首次尝试使用 Win,DirectX C++ 中的形状渲染套件.zip
- 预乘混合模式是一种用途广泛的三合一混合模式 它已经存在很长时间了,但似乎每隔几年就会被重新发现 该项目包括使用预乘 alpha 的描述,示例和工具 .zip
- 项目描述 DirectX 引擎支持版本 9、10、11 库 Microsoft SDK 功能相机视图、照明、加载网格、动画、蒙皮、层次结构界面、动画控制器、网格容器、碰撞系统 .zip
- 项目 wiki 文档中使用的代码教程的源代码库.zip
- 面向对象的通用GUI框架.zip
- 基于Java语言的PlayerBase游戏角色设计源码