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.