Android自定义数字键盘
public class LabelKeyBordView extends RelativeLayout {
private EditText et = null;
private Context mContext = null;
public LabelKeyBordView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public LabelKeyBordView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
init();
}
private void init() {
this.mContext = getContext();
this.inflate(mContext, R.layout.lable_item_keybord, this);
ButterKnife.bind(this);
}
@OnClick({R.id.label_keybord_btn_0, R.id.label_keybord_btn_1, R.id.label_keybord_btn_2,
R.id.label_keybord_btn_3, R.id.label_keybord_btn_4, R.id.label_keybord_btn_5,
R.id.label_keybord_btn_6, R.id.label_keybord_btn_7, R.id.label_keybord_btn_8,
R.id.label_keybord_btn_9, R.id.label_keybord_btn_deltee, R.id.label_keybord_btn_clear})
protected void onKeyBordClick(View v) {
switch (v.getId()) {
case R.id.label_keybord_btn_0:
setStringBufferValue("0");
break;
case R.id.label_keybord_btn_1:
setStringBufferValue("1");
break;
case R.id.label_keybord_btn_2:
setStringBufferValue("2");
break;
case R.id.label_keybord_btn_3:
setStringBufferValue("3");
break;
case R.id.label_keybord_btn_4:
setStringBufferValue("4");
break;
case R.id.label_keybord_btn_5:
setStringBufferValue("5");
break;
case R.id.label_keybord_btn_6:
setStringBufferValue("6");
break;
case R.id.label_keybord_btn_7:
setStringBufferValue("7");
break;
case R.id.label_keybord_btn_8:
setStringBufferValue("8");
break;
case R.id.label_keybord_btn_9:
setStringBufferValue("9");
break;
case R.id.label_keybord_btn_deltee:
deleteBufferText();
break;
case R.id.label_keybord_btn_clear:
setStringBufferValue(".");
break;
default:
break;
}
}
public void setEt(EditText et) {
this.et = et;
String str = et.getText().toString();
et.setSelection(TextUtils.isEmpty(str) ? 0 : str.length());
disableShowInput(et);
}
//值得录入
private void setStringBufferValue(String value) {
String buffer = et.getText().toString().trim();
if (buffer.length() < 20) {
et.getText().insert(et.getSelectionStart(), value);
}
}
private void setEtText(String txt) {
this.et.setText(txt);
}
//删除
private void deleteBufferText() {
Editable editable = et.getText();
int start = et.getSelectionStart();
if (!TextUtils.isEmpty(editable)) {
if (start > 0) {
editable.delete(start - 1, start);
}
}
}
@Override
protected void onDetachedFromWindow() {//取消注册
super.onDetachedFromWindow();
mContext = null;
}
/**
* 禁用系统键盘
*/
private void disableShowInput(EditText editText) {
if (Build.VERSION.SDK_INT <= 10) {
editText.setInputType(InputType.TYPE_NULL);
} else {
Class<EditText> cls = EditText.class;
Method method;
try {
method = cls.getMethod("setShowSoftInputOnFocus", boolean.class);
method.setAccessible(true);
method.invoke(editText, false);
} catch (Exception e) {
//e.printStackTrace();
}
try {
method = cls.getMethod("setSoftInputShownOnFocus", boolean.class);
method.setAccessible(true);
method.invoke(editText, false);
} catch (Exception e) {
//e.printStackTrace();
}
}
}
}
xml文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!--第一行按钮-->
<LinearLayout style="@style/lable_Wrap">
<TextView
android:id="@+id/label_keybord_btn_1"
style="@style/labelkey_btn"
android:text="1" />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_2"
style="@style/labelkey_btn"
android:text="2" />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_3"
style="@style/labelkey_btn"
android:text="3" />
</LinearLayout>
<View style="@style/payhybrid_divider_row" />
<!--第二行按钮-->
<LinearLayout style="@style/lable_Wrap">
<TextView
android:id="@+id/label_keybord_btn_4"
style="@style/labelkey_btn"
android:text="4" />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_5"
style="@style/labelkey_btn"
android:text="5" />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_6"
style="@style/labelkey_btn"
android:text="6" />
</LinearLayout>
<View style="@style/payhybrid_divider_row" />
<!--第3行按钮-->
<LinearLayout style="@style/lable_Wrap">
<TextView
android:id="@+id/label_keybord_btn_7"
style="@style/labelkey_btn"
android:text="7" />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_8"
style="@style/labelkey_btn"
android:text="8" />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_9"
style="@style/labelkey_btn"
android:text="9" />
</LinearLayout>
<View style="@style/payhybrid_divider_row" />
<!--第4行按钮-->
<LinearLayout style="@style/lable_Wrap">
<TextView
android:id="@+id/label_keybord_btn_clear"
style="@style/labelkey_btn"
android:text="." />
<View style="@style/payhybrid_divider_column" />
<TextView
android:id="@+id/label_keybord_btn_0"
style="@style/labelkey_btn"
android:text="0" />
<View style="@style/payhybrid_divider_column" />
<RelativeLayout
android:id="@+id/label_keybord_btn_deltee"
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:background="@drawable/payhybrid_keybord_selector_btn">
<ImageView
android:layout_width="32dp"
android:layout_height="24dp"
android:layout_centerInParent="true"
android:background="@mipmap/payhybrid_keybord_delete"
android:clickable="false" />
</RelativeLayout>
</LinearLayout>
</LinearLayout>
以上是键盘的自定义view。然后在需要调用的地方直接set就可以
下面是成品图