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


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


  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
### 回答1: 在Android中,可以使用adb命令通过IP地址连接手机。首先,确保手机和计算机连接在同一个网络下,并且已经打开了USB调试模式。接下来,打开命令行终端或者命令提示符窗口,在命令行中输入以下命令: 1. 首先,使用adb devices命令查看设备列表,确认设备已被识别并连接。 ``` adb devices ``` 2. 接下来,使用adb tcpip命令,将设备切换至TCP/IP模式。此时,设备将在5555端口等待连接。 ``` adb tcpip 5555 ``` 3. 然后,使用手机的IP地址替换下方命令示例中的"设备IP",输入以下命令连接设备: ``` adb connect 设备IP:5555 ``` 4. 如果连接成功,终端会返回"connected to 设备IP:5555"的信息,并且设备列表中将显示已连接的设备。 5. 现在,您可以使用adb命令与该设备进行交互,例如通过adb shell命令进入设备的shell,进行文件操作、安装应用程序等。 ``` adb shell ``` 6. 如果需要切换回USB模式,使用以下命令: ``` adb usb ``` 通过以上步骤,您可以在不使用USB线缆的情况下通过IP地址连接Android手机,并使用adb命令进行设备管理和调试操作。请注意,如果设备的IP地址发生变化或重启,您可能需要重新执行步骤2和步骤3来重新连接设备。 ### 回答2: 在Android中,我们可以使用adb命令通过IP地址连接手机。首先,确保手机和电脑连接到同一个WiFi网络上。 步骤如下: 1. 打开手机的设置菜单,并找到“关于手机”选项。 2. 在“关于手机”选项中,查找和点击“状态”或“网络信息”。 3. 在“状态”或“网络信息”中,可以找到手机的IP地址。 4. 在电脑上打开命令提示符或终端窗口,输入以下adb命令:adb connect <手机IP地址>:<端口号>。例如,adb connect 192.168.0.100:5555。 5. 如果一切正常,命令提示符或终端窗口将显示“已连接到<手机IP地址>:<端口号>”。 6. 现在,您可以使用其他adb命令与连接的手机进行交互了,例如安装应用程序、传输文件等。 需要注意以下事项: 1. 手机和电脑必须连接到相同的WiFi网络上,否则无法建立连接。 2. 在一些手机上,需要在开发者选项中启用网络调试模式。 3. 如果连接不成功,可以尝试断开连接并重新连接手机,或者重新启动手机和电脑后再次尝试。 通过上述步骤,您就可以在Android中使用adb命令通过IP地址连接手机,并且可以方便地使用各种adb命令来管理和调试您的设备。 ### 回答3: 在Android中,使用adb命令通过IP地址连接手机是非常方便的。步骤如下: 首先,确保手机和电脑连接在同一个局域网环境中。 其次,在电脑上打开终端或命令提示符窗口,进入adb命令所在的目录。如果你已经将adb添加到环境变量中,可以直接在任何路径下使用adb命令。 接下来,通过以下命令查找设备的IP地址:adb shell ifconfig或adb shell ip addr。在返回结果中,找到设备的IP地址。 然后,使用以下命令连接到设备的IP地址:adb connect 设备IP地址。例如,adb connect 192.168.0.100。 最后,在连接成功后,你可以像正常连接设备一样使用adb命令来操作手机了。例如,adb shell可以进入设备的命令行界面,adb install可以安装应用程序等。 需要注意的是,通过IP地址连接手机的方式可能不如通过USB连接稳定和快速,因此在进行开发或调试时,建议使用USB连接。此外,某些设备可能需要在设置中启用ADB网络调试模式才能通过IP地址连接。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值