Android中使用 AutoCompleteTextView 实现手机号格式化附带清空历史的操作

 更新时间:2017年7月6日 23:19  点击:2022
本文介绍了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_arrayAdapter =newArrayAdapter(this,

                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目录下。

[!--infotagslink--]

相关文章

  • 怎么查询自己的联通手机号码是否已经实名认证(实名制)?

    怎么查询自己的联通手机号码是否已经实名认证?现在手机一批一批的开始实名制了,自己的手机号买的时候没有实名认证,怎么才能知道自己的手机是否被知名认证了呢?认证以后就不能充话费打电话了,下面我们们一起来看看两种查看方法...2016-07-04
  • C#格式化数字字符串的方法

    这篇文章主要为大家详细介绍了C#格式化数字字符串的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...2020-06-25
  • prettier自动格式化去换行的实现代码

    这篇文章主要介绍了prettier自动格式化去换行的实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-08-26
  • PHP如何通过date() 函数格式化显示时间

    这篇文章主要介绍了PHP如何通过date() 函数格式化显示时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下...2020-11-13
  • 微信小程序 时间格式化(util.formatTime(new Date))详解

    这篇文章主要介绍了微信小程序 时间格式化(util.formatTime(new Date))详解的相关资料,这里附实例,一目了然很容易解决,需要的朋友可以参考下...2016-11-22
  • jquery插件autocomplete用法示例

    这篇文章主要介绍了jquery插件autocomplete用法,结合实例形式分析了jQuery插件autocomplete与后台交互实现搜索的自动完成功能实现技巧,需要的朋友可以参考下...2016-07-06
  • vue.js实现价格格式化的方法

    这里分享一个常用的价格格式化的一个方法,在电商的价格处理中非常的实用,具体实现代码大家参考下本文...2017-05-27
  • 关于VSCode格式化JS自动添加或去掉分号的问题

    这篇文章主要介绍了VSCode格式化JS自动添加或去掉分号的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-10-12
  • 基于bootstrap插件实现autocomplete自动完成表单

    这篇文章主要介绍了基于bootstrap插件实现autocomplete自动完成表单的相关资料,感兴趣的朋友可以参考一下...2016-05-09
  • 原生js编写autoComplete插件

    这篇文章主要为大家详细介绍了原生js编写的autoComplete插件,感兴趣的小伙伴们可以参考一下...2016-04-16
  • C#小数点格式化用法小结

    这篇文章主要介绍了C#小数点格式化用法,结合实例形式分析了C#小数点格式化运算的常用函数与相关使用技巧,需要的朋友可以参考下...2020-06-25
  • 浅谈C#手机号换成111XXXX1111 这种显示的解决思路

    下面小编就为大家带来一篇浅谈C#手机号换成111XXXX1111 这种显示的解决思路。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
  • 如何禁用input记忆性输入:input的属性AutoComplete

    firefox 和 ie 的浏览器各自实现了input历史记录的功能,可以简化输入时的麻烦,但是,有时候弹出的下拉框会挡住页面显示内容,而且在某些情况下也不需要对input框进行记录,如注册用户页面的文本框,用户多次注册时,肯定是要不同的用户名和密码,就没有必要让浏览器记录。...2013-07-31
  • Asp.net中时间格式化的6种方法详细总结

    数据控件绑定时格式化日期方法/用DataBinder.Eval进行数据绑定时/直接用ToString方法转换日期显示格式/用String类转换日期显示格式等等,感兴趣的你了解下哦,或许对你学习时间格式化有所帮助...2021-09-22
  • C# 格式化字符首字母大写的方法

    这篇文章介绍了C# 格式化字符首字母大写的方法,有需要的朋友可以参考一下...2020-06-25
  • IDEA 格式化SQL代码技巧分享

    这篇文章主要介绍了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里怎么格式化数据,怎么处理。因为Repeater 属于服务器端控件。要么利用本身的控件事件来处理,要么在数据源上处理。...2021-09-22