Usar un teclado personalizado en el desarrollo de Android

El blog anterior hablaba sobre una forma de implementar un teclado personalizado. Este método requiere edittext para activar el teclado.
Dado que mi cuadro de entrada no es edittext sino un control de casilla de verificación similar a la contraseña de pago, todos usan el primero Una forma no es fácil de implementar esta función, la forma es escribir dos controles personalizados, uno es el teclado de la provincia y el otro es el teclado de números y letras.

Mi implementación es que un control personalizado hereda de LinearLayout, luego carga y cambia el diseño a través de LayoutInflater y agrega un evento de clic a cada botón

código 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>

Código en la clase 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);
    }
}

El método onKeyListener () es el método de devolución de llamada del evento click.

Implementar métodos en la actividad:

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

De esta manera se realiza una función de teclado personalizado. El teclado de números y letras se realiza de la misma manera, y se agrega la lógica de juicio a la Actividad. Qué teclado se muestra actualmente o si se muestra o no.

Supongo que te gusta

Origin blog.csdn.net/qq77485042/article/details/88017656
Recomendado
Clasificación