Android实现仿电脑的ip地址输入
来源:互联网 发布:美图看看 mac 编辑:程序博客网 时间:2024/05/23 10:56
最近该需求改到一个特别的,估计有人也遇到过这种恶心的需求,客户端居然需要输入ip地址,感觉有点扯,客户自己输入ip地址,呵呵,总之,不完成也不行啊,没有砍经理的力气,只能撸代码了.
下面开始正题,先上一下运行效果,方便观看
上面的输入框写成了一个自定义组合控件,方便使用,说起来功能也挺简单的,主要是组合了四个EditText,然后判断EditText输入内容,还有就是对焦点的获取也是比较重要的,由于本人刚学Android不久,可能有更好的办法,这里只是写一下我自己的实现方式,同样的你可以用这种方式实现电话号码,银行卡等输入方式
下面贴一下自定义组合控件的代码:
package com.thea.guo.view;import android.content.Context;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.text.Editable;import android.text.TextUtils;import android.text.TextWatcher;import android.util.AttributeSet;import android.view.LayoutInflater;import android.view.View;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.Toast;import com.thea.guo.R;/** * 自定义控件实现ip地址特殊输入 * * @author 子墨 * * 2015-1-4 */public class IPEditText extends LinearLayout {private EditText mFirstIP;private EditText mSecondIP;private EditText mThirdIP;private EditText mFourthIP;private String mText;private String mText1;private String mText2;private String mText3;private String mText4;private SharedPreferences mPreferences;public IPEditText(Context context, AttributeSet attrs) {super(context, attrs);/** * 初始化控件 */View view = LayoutInflater.from(context).inflate(R.layout.custom_my_edittext, this);mFirstIP = (EditText)findViewById(R.id.ip_first);mSecondIP = (EditText)findViewById(R.id.ip_second);mThirdIP = (EditText)findViewById(R.id.ip_third);mFourthIP = (EditText)findViewById(R.id.ip_fourth);mPreferences = context.getSharedPreferences("config_IP",Context.MODE_PRIVATE);OperatingEditText(context);}/** * 获得EditText中的内容,当每个Edittext的字符达到三位时,自动跳转到下一个EditText,当用户点击.时, * 下一个EditText获得焦点 */private void OperatingEditText(final Context context) {mFirstIP.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {/** * 获得EditTe输入内容,做判断,如果大于255,提示不合法,当数字为合法的三位数下一个EditText获得焦点, * 用户点击啊.时,下一个EditText获得焦点 */if (s != null && s.length() > 0) {if (s.length() > 2 || s.toString().trim().contains(".")) {if (s.toString().trim().contains(".")) {mText1 = s.toString().substring(0, s.length() - 1);mFirstIP.setText(mText1);} else {mText1 = s.toString().trim();}if (Integer.parseInt(mText1) > 255) {Toast.makeText(context, "请输入合法的ip地址",Toast.LENGTH_LONG).show();return;}Editor editor = mPreferences.edit();editor.putInt("IP_FIRST", mText1.length());editor.commit();mSecondIP.setFocusable(true);mSecondIP.requestFocus();}}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});mSecondIP.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {/** * 获得EditTe输入内容,做判断,如果大于255,提示不合法,当数字为合法的三位数下一个EditText获得焦点, * 用户点击啊.时,下一个EditText获得焦点 */if (s != null && s.length() > 0) {if (s.length() > 2 || s.toString().trim().contains(".")) {if (s.toString().trim().contains(".")) {mText2 = s.toString().substring(0, s.length() - 1);mSecondIP.setText(mText2);} else {mText2 = s.toString().trim();}if (Integer.parseInt(mText2) > 255) {Toast.makeText(context, "请输入合法的ip地址",Toast.LENGTH_LONG).show();return;}Editor editor = mPreferences.edit();editor.putInt("IP_SECOND", mText2.length());editor.commit();mThirdIP.setFocusable(true);mThirdIP.requestFocus();}}/** * 当用户需要删除时,此时的EditText为空时,上一个EditText获得焦点 */if (start == 0 && s.length() == 0) {mFirstIP.setFocusable(true);mFirstIP.requestFocus();mFirstIP.setSelection(mPreferences.getInt("IP_FIRST", 0));}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});mThirdIP.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {/** * 获得EditTe输入内容,做判断,如果大于255,提示不合法,当数字为合法的三位数下一个EditText获得焦点, * 用户点击啊.时,下一个EditText获得焦点 */if (s != null && s.length() > 0) {if (s.length() > 2 || s.toString().trim().contains(".")) {if (s.toString().trim().contains(".")) {mText3 = s.toString().substring(0, s.length() - 1);mThirdIP.setText(mText3);} else {mText3 = s.toString().trim();}if (Integer.parseInt(mText3) > 255) {Toast.makeText(context, "请输入合法的ip地址",Toast.LENGTH_LONG).show();return;}Editor editor = mPreferences.edit();editor.putInt("IP_THIRD", mText3.length());editor.commit();mFourthIP.setFocusable(true);mFourthIP.requestFocus();}}/** * 当用户需要删除时,此时的EditText为空时,上一个EditText获得焦点 */if (start == 0 && s.length() == 0) {mSecondIP.setFocusable(true);mSecondIP.requestFocus();mSecondIP.setSelection(mPreferences.getInt("IP_SECOND", 0));}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});mFourthIP.addTextChangedListener(new TextWatcher() {@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {/** * 获得EditTe输入内容,做判断,如果大于255,提示不合法,当数字为合法的三位数下一个EditText获得焦点, * 用户点击啊.时,下一个EditText获得焦点 */if (s != null && s.length() > 0) {mText4 = s.toString().trim();if (Integer.parseInt(mText4) > 255) {Toast.makeText(context, "请输入合法的ip地址", Toast.LENGTH_LONG).show();return;}Editor editor = mPreferences.edit();editor.putInt("IP_FOURTH", mText4.length());editor.commit();}/** * 当用户需要删除时,此时的EditText为空时,上一个EditText获得焦点 */if (start == 0 && s.length() == 0) {mSecondIP.setFocusable(true);mSecondIP.requestFocus();mSecondIP.setSelection(mPreferences.getInt("IP_THIRD", 0));}}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void afterTextChanged(Editable s) {}});}public String getText(Context context) {if (TextUtils.isEmpty(mText1) || TextUtils.isEmpty(mText2)|| TextUtils.isEmpty(mText3) || TextUtils.isEmpty(mText4)) {Toast.makeText(context, "请输入合法的ip地址", Toast.LENGTH_LONG).show();}return mText1 + "." + mText2 + "." + mText3 + "." + mText4;}}
代码中的注解解释的很详细了,有什么问题留言吧!或者你有更好的实现方法,拜托大神,一起交流,一起进步!
csdn代码下载地址:http://download.csdn.net/detail/elinavampire/8331451
github托管地址:http://download.csdn.net/detail/elinavampire/8331451
最近加了很多大神的群,多交流会有很快的提升,感恩一切..
5 1
- Android实现仿电脑的ip地址输入
- QT:IP地址输入框的实现
- Qt实现的IP地址输入控件
- 电脑ip地址用批处理自动更改的实现方法。
- 实现IP地址输入框
- 查看电脑的ip地址
- c语言实现IP地址输入的检查
- (图解)电脑联网小问题:网络适配器输入的IP地址,已经分配给另一个适配器
- C#实现的IP地址输入框类 kewords: IP地址框 C# .Net
- 只能输入IP地址的输入框
- [Qt] IP地址输入框实现
- c# 获取电脑系统的IP地址
- 获取用户电脑的上网IP地址
- 查看自己电脑的IP地址
- 怎么查看自己电脑的IP地址?
- 如何查看电脑的IP地址
- 查看电脑的外网IP地址
- 如何查看自己电脑的ip地址
- 将EditText的光标移动到最后
- Dialog、Toast、PopupWindow及Log分析
- 【大话设计模式】——行为型模式之“顺序模式”
- SSL协议详解
- LKT2102身份认证方案
- Android实现仿电脑的ip地址输入
- Hibernate 参数设置一览表
- IE8下,采用bootstrap中的时间插件
- MFC找到TreeControl选中标签的索引值
- Android Intent 源码学习
- 探索Settings.System.putInt()
- ubuntu新装的root密码
- python 路径处理
- Android基础学习(一)