安卓开发中使用自定义的键盘

上篇博客说了一下自定义键盘的一种实现方式,该方式就是需要是edittext来唤醒键盘.
由于我的输入框不是edittext而是类似于支付密码的那种方框格子的控件,所有用第一种方式不好实现该功能.该方式就是写两个自定义控件一个是省份的键盘一个是数字和字母的键盘.

我实现方式是一个自定义控件继承自LinearLayout,然后通过LayoutInflater加载改布局,给每个按钮添加点击事件

key_province_linearlayout.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#D1D5DA"
    android:orientation="vertical"
    android:paddingBottom="10dp"
    android:paddingLeft="5dp"
    android:paddingRight="5dp"
    android:paddingTop="10dp">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <TextView
            android:id="@+id/tv_1_1"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="京"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_2"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="沪"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_3"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="粤"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_4"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="津"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_5"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="冀"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_6"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="晋"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_7"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="蒙"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_8"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="辽"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_9"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="吉"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_1_10"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="黑"
            android:textColor="#333333"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8.5dp"
        android:orientation="horizontal"
        android:paddingLeft="19dp"
        android:paddingRight="19dp">

        <TextView
            android:id="@+id/tv_2_1"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="苏"
            android:textColor="#333333"
            android:textSize="18sp" />


        <TextView
            android:id="@+id/tv_2_2"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="浙"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_3"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="皖"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_4"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="闽"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_5"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="赣"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_6"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="鲁"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_7"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="豫"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_8"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="鄂"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_2_9"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="湘"
            android:textColor="#333333"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8.5dp"
        android:orientation="horizontal"
        android:paddingLeft="37dp"
        android:paddingRight="37dp">

        <TextView
            android:id="@+id/tv_3_1"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="桂"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_2"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="琼"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_3"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="渝"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_4"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="川"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_5"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="贵"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_6"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="云"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_7"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="藏"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_3_8"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="陕"
            android:textColor="#333333"
            android:textSize="18sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="8.5dp"
        android:orientation="horizontal"
        android:paddingLeft="93dp"
        android:paddingRight="46dp">

        <TextView
            android:id="@+id/tv_4_1"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="甘"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_4_2"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="青"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_4_3"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="宁"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_4_4"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="新"
            android:textColor="#333333"
            android:textSize="18sp" />

        <TextView
            android:id="@+id/tv_4_5"
            android:layout_width="0dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:layout_weight="1"
            android:background="#ffffff"
            android:gravity="center"
            android:text="使"
            android:textColor="#333333"
            android:textSize="18sp" />

        <RelativeLayout
            android:id="@+id/rl_delete"
            android:layout_width="42dp"
            android:layout_height="42.5dp"
            android:layout_marginLeft="5dp"
            android:background="#adb3bc">

            <ImageView
                android:layout_width="19.8dp"
                android:layout_height="14.1dp"
                android:layout_centerInParent="true"
                android:src="@mipmap/icon_delete" />
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

KeyProvinceLinearLayout类中代码:

public class KeyProvinceLinearLayout extends LinearLayout implements View.OnClickListener {
    private TextView tv_1_1, tv_1_2, tv_1_3, tv_1_4, tv_1_5, tv_1_6, tv_1_7, tv_1_8, tv_1_9, tv_1_10;
    private TextView tv_2_1, tv_2_2, tv_2_3, tv_2_4, tv_2_5, tv_2_6, tv_2_7, tv_2_8, tv_2_9;
    private TextView tv_3_1, tv_3_2, tv_3_3, tv_3_4, tv_3_5, tv_3_6, tv_3_7, tv_3_8;
    private TextView tv_4_1, tv_4_2, tv_4_3, tv_4_4, tv_4_5;
    private RelativeLayout rl_delete;
    private OnKeyListeners onKeyListeners;

    public OnKeyListeners getOnKeyListeners() {
        return onKeyListeners;
    }

    public void setOnKeyListeners(OnKeyListeners onKeyListeners) {
        this.onKeyListeners = onKeyListeners;
    }

    public KeyProvinceLinearLayout(Context context) {
        this(context, null);
    }

    public KeyProvinceLinearLayout(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        View view = LayoutInflater.from(context).inflate(R.layout.key_province_linearlayout, this, true);
        view.findViewById(R.id.tv_1_1).setOnClickListener(this);
        view.findViewById(R.id.tv_1_2).setOnClickListener(this);
        view.findViewById(R.id.tv_1_3).setOnClickListener(this);
        view.findViewById(R.id.tv_1_4).setOnClickListener(this);
        view.findViewById(R.id.tv_1_5).setOnClickListener(this);
        view.findViewById(R.id.tv_1_6).setOnClickListener(this);
        view.findViewById(R.id.tv_1_7).setOnClickListener(this);
        view.findViewById(R.id.tv_1_8).setOnClickListener(this);
        view.findViewById(R.id.tv_1_9).setOnClickListener(this);
        view.findViewById(R.id.tv_1_10).setOnClickListener(this);
        view.findViewById(R.id.tv_2_1).setOnClickListener(this);
        view.findViewById(R.id.tv_2_2).setOnClickListener(this);
        view.findViewById(R.id.tv_2_3).setOnClickListener(this);
        view.findViewById(R.id.tv_2_4).setOnClickListener(this);
        view.findViewById(R.id.tv_2_5).setOnClickListener(this);
        view.findViewById(R.id.tv_2_6).setOnClickListener(this);
        view.findViewById(R.id.tv_2_7).setOnClickListener(this);
        view.findViewById(R.id.tv_2_8).setOnClickListener(this);
        view.findViewById(R.id.tv_2_9).setOnClickListener(this);
        view.findViewById(R.id.tv_3_1).setOnClickListener(this);
        view.findViewById(R.id.tv_3_2).setOnClickListener(this);
        view.findViewById(R.id.tv_3_3).setOnClickListener(this);
        view.findViewById(R.id.tv_3_4).setOnClickListener(this);
        view.findViewById(R.id.tv_3_5).setOnClickListener(this);
        view.findViewById(R.id.tv_3_6).setOnClickListener(this);
        view.findViewById(R.id.tv_3_7).setOnClickListener(this);
        view.findViewById(R.id.tv_3_8).setOnClickListener(this);
        view.findViewById(R.id.tv_4_1).setOnClickListener(this);
        view.findViewById(R.id.tv_4_2).setOnClickListener(this);
        view.findViewById(R.id.tv_4_3).setOnClickListener(this);
        view.findViewById(R.id.tv_4_4).setOnClickListener(this);
        view.findViewById(R.id.tv_4_5).setOnClickListener(this);
        view.findViewById(R.id.rl_delete).setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        if (v.getId() == R.id.rl_delete) {
            onKeyListeners.onKeyListener("");
        } else {
            if (getOnKeyListeners() != null) {
                onKeyListeners.onKeyListener(((TextView) v).getText().toString());
            }
        }
    }

    public interface OnKeyListeners {
        void onKeyListener(String str);
    }
}

onKeyListener()这个方法就是点击事件的回调方法.

在Activity中实现方法:

@Override
    public void onKeyListener(String str) {
        if (System.currentTimeMillis() - currentTime > 200) {
            if (str.equals("")) {
                if (!StringUtils.isEmpty(inputview_plate.getNumber())) {
                    inputview_plate.removeLastCharOfNumber();
                }
            } else {
                inputview_plate.updateSelectedCharAndSelectNext(str);
            }
        }
        currentTime = System.currentTimeMillis();
    }

这样就实现了自定义的键盘功能,数字和字母的键盘如法炮制,在Activity中添加判断逻辑当前展示的是什么键盘或者展示与否.

猜你喜欢

转载自blog.csdn.net/qq77485042/article/details/88017656