android 输入ip地址,Android实现仿电脑的ip地址输入

最近该需求改到一个特别的,估计有人也遇到过这种恶心的需求,客户端居然需要输入ip地址,感觉有点扯,客户自己输入ip地址,呵呵,总之,不完成也不行啊,没有砍经理的力气,只能撸代码了.

下面开始正题,先上一下运行效果,方便观看

419bb2d721a86760424a6c0e3538222e.png

上面的输入框写成了一个自定义组合控件,方便使用,说起来功能也挺简单的,主要是组合了四个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() {

@Override

public 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();

}

}

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

@Override

public void afterTextChanged(Editable s) {

}

});

mSecondIP.addTextChangedListener(new TextWatcher() {

@Override

public 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));

}

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

@Override

public void afterTextChanged(Editable s) {

}

});

mThirdIP.addTextChangedListener(new TextWatcher() {

@Override

public 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));

}

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

@Override

public void afterTextChanged(Editable s) {

}

});

mFourthIP.addTextChangedListener(new TextWatcher() {

@Override

public 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));

}

}

@Override

public void beforeTextChanged(CharSequence s, int start, int count,

int after) {

}

@Override

public 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

最近加了很多大神的群,多交流会有很快的提升,感恩一切..

原文:http://blog.csdn.net/elinavampire/article/details/42456413

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值