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就可以

下面是成品圖

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章