Utiliser un clavier personnalisé dans le développement Android

Le blog précédent parlait d'un moyen d'implémenter un clavier personnalisé. Cette méthode nécessite edittext pour réactiver le clavier.
Étant donné que ma zone de saisie n'est pas edittext mais un contrôle de case à cocher similaire au mot de passe de paiement, tous utilisent le premier Une manière n'est pas facile de mettre en œuvre cette fonction, la manière est d'écrire deux contrôles personnalisés, l'un est le clavier de la province et l'autre est le clavier de chiffres et de lettres.

Ma mise en œuvre est qu'un contrôle personnalisé hérite de LinearLayout, puis charge et modifie la disposition via LayoutInflater, et ajoute un événement de clic à chaque bouton

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

Code dans la classe 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);
    }
}

La méthode onKeyListener () est la méthode de rappel de l'événement click.

Mettre en œuvre des méthodes dans l'activité:

@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 cette manière, une fonction de clavier personnalisée est réalisée, le clavier de chiffres et de lettres est suivi de la même méthode, et la logique de jugement est ajoutée à l'activité quel clavier est actuellement affiché ou s'il est affiché ou non.

Je suppose que tu aimes

Origine blog.csdn.net/qq77485042/article/details/88017656
conseillé
Classement