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

最近该需求改到一个特别的,估计有人也遇到过这种恶心的需求,客户端居然需要输入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() {

			@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

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

时间: 2024-10-10 06:31:07

Android实现仿电脑的ip地址输入的相关文章

(转)怎样查看局域网中自己的IP地址和其他电脑的IP地址?

开始菜单->运行->打cmd,回车->再弹出的黑框里打ipconfig -all,回车显示的IP Address就是你的ip地址看局域网的电脑的ip用软件比较方便,比如p2p终结者,网络执法官什么的,不过不建议使用 我在"运行"中输入CMD后,再输入ipconfig后出来了很多IP地址,请问哪个才是我电脑的IP地址.还有怎么才能知道同一个局域网中其他电脑的IP地址呢? 分享到: 2011-04-07 23:08提问者采纳 ipconfig 查到 (以下以我的为例) I

怎么查看自己电脑的IP地址?

有时候某些情况下,我们需要知道自己电脑的IP地址是多少,很多人都突然束手无策,不知道去哪里找,其实很简单的,而且方法也很多,笔者分享如下: 使用Ping命名查询IP 1 使用Windows+R键打开“运行”窗口,然后输入CMD进入命令提示窗口 2 进入命令窗口之后,输入:ipconfig/all 回车即可看到整个电脑的详细的IP配置信息 END 使用网络状态查看IP地址 1 进入“网络和共享中心”(在控制面板可以进入,右单击左下角那个网络图标也可以进入),然后再点击已链接的网络,如图 2 完成第

xamarin android,UWP 网络类型和IP地址

App开发经常要判断网络连通情况,并判断网络类型,获取网络IP.xamarin中可以使用Dependencies提供各平台下的方法,现把各平台代码记录如下: 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 using Android.App; 7 using Android.Content; 8 using Android.OS; 9 using A

Android中获取本机ip地址和MAC地址

通过InetAddress.getLocalHost()得到始终是"127.0.0.1",要想得到真正的网络ip地址要通过下面的方法: 首先新建一个工程,修改AndroidManifest.xml文件增加用户权限,如下: <uses-permission android:name="android.permission.INTERNET"/>   //必写 <uses-permission android:name="android.pe

动态IP转换器_怎么修改电脑/手机IP地址

提到IP大家都应该知道,IP显示是一个你所在地的一个代码,凡是有带网络的产品设备都会有一个独立的IP显示地址.如果你是连接的WIFI此时你的IP就是你连接的网络的IP. 你是使用的手机网络就是你手机网络的IP地址.有的人想自己在手机或者电脑上设置成一个别的城市的IP地址应该怎么解决呢.其实一般手机是动态IP地址的,也就是你手机上的IP地址是可以自己切换的,但是不能换IP显示的城市,IP变动也是不大的,现在可以利用一个IP转换器的工具来使用的,可以全国性的修改IP地址,也就是隐藏自己IP最好的方法

怎样查看电脑的IP地址

在DOW窗体 :cmd->ipconfig 见截图:

[Android]获取当前WIFI的ip地址

配置清单文件加上权限 private String getLocalIpAddress() { int paramInt = ((WifiManager) getSystemService("wifi")).getConnectionInfo().getIpAddress(); return (paramInt & 0xFF) + "." + (0xFF & paramInt >> 8) + "." + (0xFF &

怎么查看无线网络中电脑的IP地址?

1. 2. 3. 4. 5.

查看电脑IP地址

在日常开发中,经常需要查看电脑的IP地址,下面就分享一下如何快速查看IP地址 首先使用快捷键Windows(即四个小方块的按钮)+R 就会出现上面的小框框,输入cmd点确定 2. 就会出现上面的命令指示符的框框,输入ipconfig后按回车 3. 就可以查看到电脑的IP地址了 注意:IP地址不是一成不变的,随着连接的网络等各方面原因是会进行变化的