Use a custom keyboard in Android development

The previous blog talked about a way to implement a custom keyboard. This method requires edittext to wake up the keyboard.
Since my input box is not edittext but a check box control similar to the payment password, all use the first One way is not easy to implement this function. The way is to write two custom controls, one is the keyboard of the province and the other is the keyboard of numbers and letters.

My implementation is that a custom control inherits from LinearLayout, then loads and changes the layout through LayoutInflater, and adds a click event to each button

key_province_linearlayout.xml code:

<?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>

Code in the KeyProvinceLinearLayout class:

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);
    }
}

The onKeyListener() method is the callback method of the click event.

Implement methods in 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();
    }

In this way, a custom keyboard function is realized.The keyboard of numbers and letters is made in the same way, and the judgment logic is added to the Activity. What keyboard is currently displayed or whether it is displayed or not.

Guess you like

Origin blog.csdn.net/qq77485042/article/details/88017656