android IP地址输入控件,EditView焦点自动跳转下一个EditView
在做一个奇葩项目,碰到需要在手机上输入ip地址的东东,封装了一个控件,特此记录。
package com.sunseen.spcontrolsystem.view; import android.content.Context; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.widget.EditText; import android.widget.LinearLayout; import com.sunseen.spcontrolsystem.R; /** * ip地址控件 */ public class IPAddressView extends LinearLayout implements EditText.OnFocusChangeListener { private EditText ip_one, ip_two, ip_three, ip_four; private LinearLayout layout; public IPAddressView(@NonNull Context context) { super(context); } public IPAddressView(@NonNull Context context, @Nullable AttributeSet attrs) { super(context, attrs); } public IPAddressView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); } public IPAddressView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); } /** * @param res 設置佈局 */ public void setLayout(int res) { layout = (LinearLayout) LayoutInflater.from(getContext()).inflate(res, this, true); ip_one = findViewById(R.id.ip_one); ip_two = findViewById(R.id.ip_two); ip_three = findViewById(R.id.ip_three); ip_four = findViewById(R.id.ip_four); ip_one.setOnFocusChangeListener(this); ip_two.setOnFocusChangeListener(this); ip_three.setOnFocusChangeListener(this); ip_four.setOnFocusChangeListener(this); } public String getIp() { String ip = ip_one.getText().toString() + "." + ip_two.getText().toString() + "." + ip_three.getText().toString() + "." + ip_four.getText().toString(); return ip; } /** * @param res 設置背景 */ public void setBackground(int res) { if (layout != null) { layout.setBackground(getResources().getDrawable(res, null)); } } /** * @param color 顔色id * 設置字體顔色 */ public void setTextColor(int color) { if (ip_one != null && ip_two != null && ip_three != null && ip_four != null) { ip_one.setTextColor(getResources().getColor(color)); ip_two.setTextColor(getResources().getColor(color)); ip_three.setTextColor(getResources().getColor(color)); ip_four.setTextColor(getResources().getColor(color)); } } /** * @param size * 設置字體大小 */ public void setTextSize(float size) { if (ip_one != null && ip_two != null && ip_three != null && ip_four != null) { ip_one.setTextSize(size); ip_two.setTextSize(size); ip_three.setTextSize(size); ip_four.setTextSize(size); } } @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { if (v instanceof EditText) { ((EditText) v).setSelection(((EditText) v).getText().toString().length()); } } } /** * @param str * 设置数据 */ public void setTextIP(String str) { if (!TextUtils.isEmpty(str)) { String[] ipStr = str.split("\\."); if (ipStr.length == 4) { ip_one.setText(ipStr[0]); ip_two.setText(ipStr[1]); ip_three.setText(ipStr[2]); ip_four.setText(ipStr[3]); } } } }
布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="match_parent"
android:gravity="center"
android:layout_height="match_parent">
<EditText
android:id="@+id/ip_one"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="192"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:textStyle="bold"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:text="."/>
<EditText
android:id="@+id/ip_two"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="192"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:textStyle="bold"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:text="."/>
<EditText
android:id="@+id/ip_three"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="192"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:textStyle="bold"
android:layout_marginLeft="1dp"
android:layout_marginRight="1dp"
android:text="."/>
<EditText
android:id="@+id/ip_four"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:text="192"/>
</LinearLayout>
使用方法
ip_view.setLayout(R.layout.ip_address_view);//布局文件,目前是写死的,不过感觉这种方法很活,以后可以复用
ip_view.getIp();//获取ip
ip_view.setTextIP("192.168.1.123");//设置数据