package com.my.androidtext.view; import android.content.Context; import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; 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.my.androidtext.R; public class IPEditText extends LinearLayout { private Context context; private EditText firstIPEdit; private EditText secondIPEdit; private EditText thirdIPEdit; private EditText fourthIPEdit; private String firstIP; private String secondIP; private String thirdIP; private String fourthIP; private int visible; public IPEditText(Context context, AttributeSet attrs) { super(context, attrs); this.context = context; visible = View.VISIBLE; // TODO Auto-generated constructor stub View view = LayoutInflater.from(context).inflate(R.layout.layout_ip_edit, this); firstIPEdit = (EditText) view.findViewById(R.id.firstIPfield); secondIPEdit = (EditText) view.findViewById(R.id.secondIPfield); thirdIPEdit = (EditText) view.findViewById(R.id.thirdIPfield); fourthIPEdit = (EditText) view.findViewById(R.id.fourthIPfield); setIPEditTextListener(context); } public void setIPEditTextListener(final Context context) { //设置第一个字段的事件监听 firstIPEdit.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub Log.i("test", s.toString()); if (null != s && s.length() > 0) { if (s.length() > 2 || s.toString().trim().contains(".")) { if (s.toString().trim().contains(".")) { firstIP = s.toString().trim().substring(0, s.length() - 1); } else { firstIP = s.toString().trim(); } if (Integer.parseInt(firstIP) > 255) { return; } secondIPEdit.setFocusable(true); secondIPEdit.requestFocus(); } else { firstIP = s.toString().trim(); } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub firstIPEdit.removeTextChangedListener(this); firstIPEdit.setText(firstIP); firstIPEdit.setSelection(firstIP.length()); firstIPEdit.addTextChangedListener(this); } }); //设置第二个IP字段的事件监听 secondIPEdit.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if (null != s && s.length() > 0) { if (s.length() > 2 || s.toString().trim().contains(".")) { if (s.toString().trim().contains(".")) { secondIP = s.toString().trim().substring(0, s.length() - 1); } else { secondIP = s.toString().trim(); } if (Integer.parseInt(secondIP) > 255) { return; } thirdIPEdit.setFocusable(true); thirdIPEdit.requestFocus(); } else { secondIP = s.toString().trim(); } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub secondIPEdit.removeTextChangedListener(this); secondIPEdit.setText(secondIP); secondIPEdit.setSelection(secondIP.length()); secondIPEdit.addTextChangedListener(this); } }); //设置第三个IP字段的事件监听 thirdIPEdit.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if (null != s && s.length() > 0) { if (s.length() > 2 || s.toString().trim().contains(".")) { if (s.toString().trim().contains(".")) { thirdIP = s.toString().trim().substring(0, s.length() - 1); } else { thirdIP = s.toString().trim(); } if (Integer.parseInt(thirdIP) > 255) { return; } fourthIPEdit.setFocusable(true); fourthIPEdit.requestFocus(); } else { thirdIP = s.toString().trim(); } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub thirdIPEdit.removeTextChangedListener(this); thirdIPEdit.setText(thirdIP); thirdIPEdit.setSelection(thirdIP.length()); thirdIPEdit.addTextChangedListener(this); } }); //设置第四个IP字段的事件监听 fourthIPEdit.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { // TODO Auto-generated method stub if (null != s && s.length() > 0) { fourthIP = s.toString().trim(); if (Integer.parseInt(fourthIP) > 255) { return; } } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { // TODO Auto-generated method stub } @Override public void afterTextChanged(Editable s) { // TODO Auto-generated method stub } }); } public void setVisible(int visible) { this.visible = visible; } public boolean isVisible() { return View.VISIBLE==visible; } public String getText() { if (TextUtils.isEmpty(firstIP) || TextUtils.isEmpty(secondIP) || TextUtils.isEmpty(thirdIP) || TextUtils.isEmpty(fourthIP)) { return ""; } return firstIP + "." + secondIP + "." + thirdIP + "." + fourthIP; } public void setText(String ip) { if (TextUtils.isEmpty(ip)) { return; } String[] strs = ip.split("\\."); if (strs.length != 4) { return; } firstIPEdit.setText(strs[0]); secondIPEdit.setText(strs[1]); thirdIPEdit.setText(strs[2]); fourthIPEdit.setText(strs[3]); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="300dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:layout_marginRight="10dp" android:orientation="horizontal" android:paddingTop="10dp" android:paddingBottom="10dp"> <EditText android:id="@+id/firstIPfield" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberDecimal" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="." /> <EditText android:id="@+id/secondIPfield" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberDecimal" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="." /> <EditText android:id="@+id/thirdIPfield" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberDecimal" /> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="." /> <EditText android:id="@+id/fourthIPfield" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:gravity="center" android:inputType="numberDecimal" /> </LinearLayout>