android IP地址输入控件,EditView焦点自动跳转下一个EditView

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");//设置数据
 

相关推荐
程序员的必经之路! 【限时优惠】 现在下单,还享四重好礼: 1、教学课件免费下载 2、课程案例代码免费下载 3、专属VIP学员群免费答疑 4、下单还送800元编程大礼包 【超实用课程内容】  根据《2019-2020年中国开发者调查报告》显示,超83%的开发者都在使用MySQL数据库。使用量大同时,掌握MySQL早已是运维、DBA的必备技能,甚至部分IT开发岗位也要求对数据库使用和原理有深入的了解和掌握。 学习编程,你可能会犹豫选择 C++ 还是 Java;入门数据科学,你可能会纠结于选择 Python 还是 R;但无论如何, MySQL 都是 IT 从业人员不可或缺的技能!   套餐中一共包含2门MySQL数据库必学的核心课程(共98课时)   课程1:《MySQL数据库从入门到实战应用》   课程2:《高性能MySQL实战课》   【哪些人适合学习这门课程?】  1)平时只接触了语言基础,并未学习任何数据库知识的人;  2)对MySQL掌握程度薄弱的人,课程可以让你更好发挥MySQL最佳性能; 3)想修炼更好的MySQL内功,工作中遇到高并发场景可以游刃有余; 4)被面试官打破沙锅问到底的问题问到怀疑人生的应聘者。 【课程主要讲哪些内容?】 课程一:《MySQL数据库从入门到实战应用》 主要从基础篇,SQL语言篇、MySQL进阶篇三个角度展开讲解,帮助大家更加高效的管理MySQL数据库。 课程二:《高性能MySQL实战课》主要从高可用篇、MySQL8.0新特性篇,性能优化篇,面试篇四个角度展开讲解,帮助大家发挥MySQL的最佳性能的优化方法,掌握如何处理海量业务数据和高并发请求 【你能收获到什么?】  1.基础再提高,针对MySQL核心知识点学透,用对; 2.能力再提高,日常工作中的代码换新貌,不怕问题; 3.面试再加分,巴不得面试官打破沙锅问到底,竞争力MAX。 【课程如何观看?】  1、登录CSDN学院 APP 在我的课程中进行学习; 2、移动端:CSDN 学院APP(注意不是CSDN APP哦)  本课程为录播课,课程永久有效观看时长 【资料开放】 课件、课程案例代码完全开放给你,你可以根据所学知识,自行修改、优化。  下载方式:电脑登录课程观看页面,点击右侧课件,可进行课程资料的打包下载。
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页