自定義數字鍵盤(固定button鍵盤)

最近做支付相關軟件,老闆不想用系統的鍵盤,要自己寫一個固定的按鈕做鍵盤,感覺一個一個按鈕加上去 挺麻煩的,而且有好幾個頁面都要使用這個鍵盤,做爲程序員,我來封裝一下。話不多說,直接上核心代碼,主要是一個fragment和一個layout

1:MyKeyBoardFragment:原理就是點擊按鈕後模擬鍵盤點擊事件,封裝在performKeyDown方法中。

package com.dingmore.terminal.ui.more;

import android.app.Activity;
import android.app.Instrumentation;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.ViewGroup;
import android.widget.Button;

import com.dingmore.terminal.R;

public class MyKeyBoardFragment extends Fragment implements OnClickListener{
	Activity mActivity;
	View rootView;

	private Button button_1,button_2,button_3,button_4,button_5,button_6,button_7,button_8,button_9,button_0,button_del,button_point;
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		mActivity=getActivity();
		rootView=inflater.inflate(R.layout.keyboard_layout, container, false);
		initView();
		return rootView;
	}
	
	private void initView() {
		button_0=(Button)rootView.findViewById(R.id.button_0);
		button_1=(Button)rootView.findViewById(R.id.button_1);
		button_2=(Button)rootView.findViewById(R.id.button_2);
		button_3=(Button)rootView.findViewById(R.id.button_3);
		button_4=(Button)rootView.findViewById(R.id.button_4);
		button_5=(Button)rootView.findViewById(R.id.button_5);
		button_6=(Button)rootView.findViewById(R.id.button_6);
		button_7=(Button)rootView.findViewById(R.id.button_7);
		button_8=(Button)rootView.findViewById(R.id.button_8);
		button_9=(Button)rootView.findViewById(R.id.button_9);
		button_point=(Button)rootView.findViewById(R.id.button_point);
		button_del=(Button)rootView.findViewById(R.id.button_del);
		button_0.setOnClickListener(this);
		button_1.setOnClickListener(this);
		button_2.setOnClickListener(this);
		button_3.setOnClickListener(this);
		button_4.setOnClickListener(this);
		button_5.setOnClickListener(this);
		button_6.setOnClickListener(this);
		button_7.setOnClickListener(this);
		button_8.setOnClickListener(this);
		button_9.setOnClickListener(this);
		button_point.setOnClickListener(this);
		button_del.setOnClickListener(this);
		button_del.setOnLongClickListener(new OnLongClickListener() {
			@Override
			public boolean onLongClick(View v) {
				// TODO Auto-generated method stub
				performKeyDown(KeyEvent.KEYCODE_CLEAR);
				return false;
			}
		});
	}
	@Override
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		switch (arg0.getId()) {
		case R.id.button_0:
			performKeyDown(KeyEvent.KEYCODE_0);
			break;
		case R.id.button_1:
			performKeyDown(KeyEvent.KEYCODE_1);
			break;
		case R.id.button_2:
			performKeyDown(KeyEvent.KEYCODE_2);
			break;
		case R.id.button_3:
			performKeyDown(KeyEvent.KEYCODE_3);
			break;
		case R.id.button_4:
			performKeyDown(KeyEvent.KEYCODE_4);
			break;
		case R.id.button_5:
			performKeyDown(KeyEvent.KEYCODE_5);
			break;
		case R.id.button_6:
			performKeyDown(KeyEvent.KEYCODE_6);
			break;
		case R.id.button_7:
			performKeyDown(KeyEvent.KEYCODE_7);
			break;
		case R.id.button_8:
			performKeyDown(KeyEvent.KEYCODE_8);
			break;
		case R.id.button_9:
			performKeyDown(KeyEvent.KEYCODE_9);
			break;
		case R.id.button_point:
			performKeyDown(KeyEvent.KEYCODE_NUMPAD_DOT);
			break;
		case R.id.button_del:
			performKeyDown(KeyEvent.KEYCODE_DEL);
			break;
		default:
			break;
		}
		
	}
	//模擬鍵盤輸入
	public void performKeyDown(final int keyCode) {
		new Thread() {
			public void run() {
				try {
					Instrumentation inst = new Instrumentation();
					inst.sendKeyDownUpSync(keyCode);
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}.start();
	}
}
2:佈局代碼

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#F0F1EE"
    android:orientation="horizontal" >

    <LinearLayout
        android:id="@+id/input_buttons"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_marginTop="10dp"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal" >

            <Button
                android:id="@+id/button_1"
                style="@style/input_button_style"
                android:text="1" />

            <Button
                android:id="@+id/button_2"
                style="@style/input_button_style"
                android:text="2" />

            <Button
                android:id="@+id/button_3"
                style="@style/input_button_style"
                android:text="3" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button_4"
                style="@style/input_button_style"
                android:text="4" />

            <Button
                android:id="@+id/button_5"
                style="@style/input_button_style"
                android:text="5" />

            <Button
                android:id="@+id/button_6"
                style="@style/input_button_style"
                android:text="6" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button_7"
                style="@style/input_button_style"
                android:text="7" />

            <Button
                android:id="@+id/button_8"
                style="@style/input_button_style"
                android:text="8" />

            <Button
                android:id="@+id/button_9"
                style="@style/input_button_style"
                android:text="9" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" >

            <Button
                android:id="@+id/button_point"
                style="@style/input_button_style"
                android:text="." />

            <Button
                android:id="@+id/button_0"
                style="@style/input_button_style"
                android:text="0" />

            <Button
                android:id="@+id/button_del"
                style="@style/input_button_style"
                android:text="刪除" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>
3:使用方法:在你的FragmentActivity的佈局中加入

<fragment
	            android:id="@+id/keyboard_fragment"
	            android:layout_width="fill_parent"
	            android:layout_height="fill_parent"
	            class="com.ui.more.MyKeyBoardFragment" />//注意這裏的class要根據自己的包名改一下
4:可能會遇到的問題和解決方案

error inflating class fragment--

Fragment引用的包是:
import android.support.v4.app.Fragment;
而不是:
import android.app.Fragment;
然後Activity必須是繼承FragmentActivity
import android.support.v4.app.FragmentActivity;
注意:如果在同一個FragmentActivity中多次使用此鍵盤,記住要設置成不同id,否則系統會只顯示其中一個。























發佈了58 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章