Android 自定义IP输入框

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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值