Android中使用 AutoCompleteTextView 实现手机号格式化附带清空历史的操作
有个小伙伴遇到了这样一个问题,就是AutoCompleteTextView实现自动填充的功能。同时要具备手机格式化的功能。下拉列表最后一行是有个清除历史的功能。可是点击“清除历史”却把文字要设置进去AutoCompleteTextView中。这样的效果显然很糟糕。所以我就写了这样一个简单的demo。来帮助遇到这种问题的朋友解决这样一个问题。二话不多说直接上代码。
布局文件(activity_main.xml)代码如下:
代码如下 | 复制代码 |
<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"/>
|
java文件(MainActivity.java)代码如下:
代码如下 | 复制代码 |
importandroid.app.Activity; importandroid.os.Bundle; importandroid.text.Editable; importandroid.text.Selection; importandroid.text.TextWatcher; importandroid.view.View; importandroid.widget.AdapterView; importandroid.widget.AdapterView.OnItemClickListener; importandroid.widget.ArrayAdapter; importandroid.widget.AutoCompleteTextView; importandroid.widget.EditText; importandroid.widget.TextView; importandroid.widget.Toast; publicclassMainActivityextendsActivity { privateAutoCompleteTextView mAutoCompleteTextView; privateString[] mAutoStrs =newString[] {"138 0013 8000","13800138001", "13800138002","13800138003","13800138004","138 0013 800清除记录"}; privateString mBeforeTextChangedStr =""; publicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mAutoCompleteTextView = (AutoCompleteTextView) findViewById(R.id.actv); ArrayAdapter android.R.layout.simple_dropdown_item_1line, mAutoStrs); mAutoCompleteTextView.setAdapter(_arrayAdapter); mAutoCompleteTextView.setThreshold(1);// 设置输入一个字符就提示 mAutoCompleteTextView.setOnItemClickListener(newOnItemClickListener() { @Override publicvoidonItemClick(AdapterView arg0, View arg1,intarg2, longarg3) { String _clearStr =""; if(arg1instanceofTextView) { _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对象 */ publicvoidphoneNumAddSpaceOne(finalEditText editText) { editText.addTextChangedListener(newTextWatcher() { privateintstart; privateintbefore; privateStringBuilder stringBuilder; @Override publicvoidonTextChanged(CharSequence s,intstart,intbefore, intcount) { this.start = start; this.before = before; } @Override publicvoidbeforeTextChanged(CharSequence s,intstart,intcount, intafter) { } @Override publicvoidafterTextChanged(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 =newStringBuilder(); }else{ stringBuilder.delete(0, stringBuilder.length()); } for(inti =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())) { intindex = 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 */ publicbooleanisNumeric(String str) { for(inti = str.length(); --i >=0;) { intchr = str.charAt(i); if(chr<48|| chr="">57) returnfalse; } returntrue; } } |
本文给大家介绍了android动态设置app当前运行语言的方法,非常有用,不懂的同学可以考虑
android开发中有时候碰到切换语言的需求,这时候需要通过代码动态改变当前运行语言。
代码如下 | 复制代码 |
packagecom.example.androidtest;
importjava.util.Locale;
importandroid.os.Bundle; importandroid.app.Activity; importandroid.content.Intent; importandroid.content.res.Configuration; importandroid.content.res.Resources; importandroid.util.DisplayMetrics; importandroid.view.Menu; importandroid.view.View; importandroid.widget.Button;
publicclassMainActivityextendsActivity {
@Override protectedvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
Button btnLang = (Button) findViewById(R.id.btn); // 按下按钮改变语言类型,在“简体中文”和“英文”之间切换 btnLang.setOnClickListener(newView.OnClickListener() {
@Override publicvoidonClick(View v) { // 获取当前Locale(包含语言信息) Locale curLocale = getResources().getConfiguration().locale;
// 判断语言类型,有以下两种判断方式
// 方法一,通过Locale的equals方法 // public boolean equals (Object object) // Returns true if object is a locale with the same language, country and variant. if(curLocale.equals(Locale.SIMPLIFIED_CHINESE)) { setLang(Locale.ENGLISH); }else{ setLang(Locale.SIMPLIFIED_CHINESE); }
// 方法二,通过语言码,getLanguage()方法可以获得对应语言码 // public String getLanguage () // Returns the language code for this Locale or the empty string if no language was set. // if (curLocale.getLanguage().equals(Locale.SIMPLIFIED_CHINESE.getLanguage())) { // setLang(Locale.ENGLISH); // } else { // setLang(Locale.SIMPLIFIED_CHINESE); // } } }); }
privatevoidsetLang(Locale l) { // 获得res资源对象 Resources resources = getResources(); // 获得设置对象 Configuration config = resources.getConfiguration(); // 获得屏幕参数:主要是分辨率,像素等。 DisplayMetrics dm = resources.getDisplayMetrics(); // 语言 config.locale = l; resources.updateConfiguration(config, dm);
// 刷新activity才能马上奏效 startActivity(newIntent().setClass(MainActivity.this, MainActivity.class)); MainActivity.this.finish(); }
@Override publicbooleanonCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); returntrue; }
} |
通过下面一行代码获得当前语言信息
Locale curLocale = getResources().getConfiguration().locale;
判断语言和设置语言部分有详细注释,就不做过多解释啦!
资源文件需要支持多语言环境,这样才能看到切换语言的效果!
创建values-en文件夹,并创建英文版的strings.xml文件。
本文介绍了Android Studio下添加assets目录的实现方法,非常实用,有兴趣的朋友可以看看有时候需要放置一些文件而且不被proguard压缩,可以放到assets目录中。
但是工程默认并未创建assets目录,那么如何在android studio中创建assets目录呢?
目录位置为:XXX\src\main\assets
XXX代表你的项目的路径,assets放在src\main目录下。
相关文章
- 怎么查询自己的联通手机号码是否已经实名认证?现在手机一批一批的开始实名制了,自己的手机号买的时候没有实名认证,怎么才能知道自己的手机是否被知名认证了呢?认证以后就不能充话费打电话了,下面我们们一起来看看两种查看方法...2016-07-04
- 这篇文章主要为大家详细介绍了C#格式化数字字符串的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
- 这篇文章主要介绍了prettier自动格式化去换行的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-26
- 这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
微信小程序 时间格式化(util.formatTime(new Date))详解
这篇文章主要介绍了微信小程序 时间格式化(util.formatTime(new Date))详解的相关资料,这里附实例,一目了然很容易解决,需要的朋友可以参考下...2016-11-22- 这篇文章主要介绍了jquery插件autocomplete用法,结合实例形式分析了jQuery插件autocomplete与后台交互实现搜索的自动完成功能实现技巧,需要的朋友可以参考下...2016-07-06
- 这里分享一个常用的价格格式化的一个方法,在电商的价格处理中非常的实用,具体实现代码大家参考下本文...2017-05-27
- 这篇文章主要介绍了VSCode格式化JS自动添加或去掉分号的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-12
基于bootstrap插件实现autocomplete自动完成表单
这篇文章主要介绍了基于bootstrap插件实现autocomplete自动完成表单的相关资料,感兴趣的朋友可以参考一下...2016-05-09- 这篇文章主要为大家详细介绍了原生js编写的autoComplete插件,感兴趣的小伙伴们可以参考一下...2016-04-16
- 这篇文章主要介绍了C#小数点格式化用法,结合实例形式分析了C#小数点格式化运算的常用函数与相关使用技巧,需要的朋友可以参考下...2020-06-25
浅谈C#手机号换成111XXXX1111 这种显示的解决思路
下面小编就为大家带来一篇浅谈C#手机号换成111XXXX1111 这种显示的解决思路。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25如何禁用input记忆性输入:input的属性AutoComplete
firefox 和 ie 的浏览器各自实现了input历史记录的功能,可以简化输入时的麻烦,但是,有时候弹出的下拉框会挡住页面显示内容,而且在某些情况下也不需要对input框进行记录,如注册用户页面的文本框,用户多次注册时,肯定是要不同的用户名和密码,就没有必要让浏览器记录。...2013-07-31- 数据控件绑定时格式化日期方法/用DataBinder.Eval进行数据绑定时/直接用ToString方法转换日期显示格式/用String类转换日期显示格式等等,感兴趣的你了解下哦,或许对你学习时间格式化有所帮助...2021-09-22
- 这篇文章介绍了C# 格式化字符首字母大写的方法,有需要的朋友可以参考一下...2020-06-25
- 这篇文章主要介绍了IDEA 格式化SQL代码技巧分享,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-25
- 这个文档描述如何安全显示的有格式的用户输入。我们将讨论没有经过过滤的输出的危险,给出一个安全的显示格式化输出的方法。 没有过滤输出的危险 如果你仅仅获得用户的...2016-11-25
Golang中使用Date进行日期格式化(沿用Java风格)
这篇文章主要介绍了Golang中使用Date进行日期格式化,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-05-11阿里云主机Windows 2008服务器硬盘分区和格式化图文教程
这篇文章主要介绍了阿里云主机Windows 2008服务器硬盘分区和格式化图文教程,本文对每一个步骤都配有图文解说,一看就会呀,需要的朋友可以参考下...2016-01-27- 最近不止一个同学,问我在Repeater里怎么格式化数据,怎么处理。因为Repeater 属于服务器端控件。要么利用本身的控件事件来处理,要么在数据源上处理。...2021-09-22