آموزش ساخت کیبورد سفارشی در برنامه نویسی اندروید

امتیاز 3.42 ( 24 رای )

سلام دوستان در این سری از آموزش برنامه نویسی اندروید به آموزش ساخت کیبورد سفارشی در برنامه نویسی اندروید می پردازیم برنامه های که در اینترنت می بینید از همین کد ها استفاده کرده اند و فقط بخش های از آن را سفارشی سازی کرده اند پس در ادامه می توانید پیش نمایشی از آن را مشاهده کنید با ما همراه باشید.

 
در ابتدای کار وارد فایل string.xml شده (در مسیر res/values قرار دارد) سپس string های زیر را در آن قرار دهید.

<resources>
    <string name="app_name">Programchi KeyBoard</string>
    <string name="simple_ime">Simple IME</string>
    <string name="subtype_en_US">English (US)</string>
</resources>

 
در ابتدای کار شما باید یک پوشه در ریشه res خود به نام  xml ایجاد کنید سپس در آن یک فایل به نام  qwerty.xml ایجاد کرده و کد های زیر را در آن قرار دهید.

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
    android:keyWidth="10%p"
	android:horizontalGap="0px"
	android:verticalGap="0px"
	android:keyHeight="60dp"
>
	<Row>
		<Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/>
		<Key android:codes="50" android:keyLabel="2"/>
		<Key android:codes="51" android:keyLabel="3"/>
		<Key android:codes="52" android:keyLabel="4"/>
		<Key android:codes="53" android:keyLabel="5"/>
		<Key android:codes="54" android:keyLabel="6"/>
		<Key android:codes="55" android:keyLabel="7"/>
		<Key android:codes="56" android:keyLabel="8"/>
		<Key android:codes="57" android:keyLabel="9"/>
		<Key android:codes="48" android:keyLabel="0" android:keyEdgeFlags="right"/>
	</Row>
	<Row>
		<Key android:codes="113" android:keyLabel="q" android:keyEdgeFlags="left"/>
		<Key android:codes="119" android:keyLabel="w"/>
		<Key android:codes="101" android:keyLabel="e"/>
		<Key android:codes="114" android:keyLabel="r"/>
		<Key android:codes="116" android:keyLabel="t"/>
		<Key android:codes="121" android:keyLabel="y"/>
		<Key android:codes="117" android:keyLabel="u"/>
		<Key android:codes="105" android:keyLabel="i"/>
		<Key android:codes="111" android:keyLabel="o"/>
		<Key android:codes="112" android:keyLabel="p" android:keyEdgeFlags="right"/>
	</Row>
	<Row>
		<Key android:codes="97" android:keyLabel="a" android:keyEdgeFlags="left"/>
		<Key android:codes="115" android:keyLabel="s"/>
		<Key android:codes="100" android:keyLabel="d"/>
		<Key android:codes="102" android:keyLabel="f"/>
		<Key android:codes="103" android:keyLabel="g"/>
		<Key android:codes="104" android:keyLabel="h"/>
		<Key android:codes="106" android:keyLabel="j"/>
		<Key android:codes="107" android:keyLabel="k"/>
		<Key android:codes="108" android:keyLabel="l"/>
		<Key android:codes="35,64" android:keyLabel="\# \@" android:keyEdgeFlags="right"/>
	</Row>
	<Row>
	    <Key android:codes="-1" android:keyLabel="CAPS" android:keyEdgeFlags="left"/>
		<Key android:codes="122" android:keyLabel="z"/>
		<Key android:codes="120" android:keyLabel="x"/>
		<Key android:codes="99" android:keyLabel="c"/>
		<Key android:codes="118" android:keyLabel="v"/>
		<Key android:codes="98" android:keyLabel="b"/>
		<Key android:codes="110" android:keyLabel="n"/>
		<Key android:codes="109" android:keyLabel="m"/>
		<Key android:codes="46" android:keyLabel="."/>
		<Key android:codes="63,33,58" android:keyLabel="\? ! :" android:keyEdgeFlags="right"/>
	</Row>
	<Row android:rowEdgeFlags="bottom">
	    <Key android:codes="44" android:keyLabel="," android:keyWidth="10%p"  android:keyEdgeFlags="left"/>
		<Key android:codes="47" android:keyLabel="/" android:keyWidth="10%p" />
		<Key android:codes="32" android:keyLabel="SPACE" android:keyWidth="40%p" android:isRepeatable="true"/>
		<Key android:codes="-5" android:keyLabel="DEL" android:keyWidth="20%p" android:isRepeatable="true"/>
		<Key android:codes="-4" android:keyLabel="DONE" android:keyWidth="20%p" android:keyEdgeFlags="right"/>
	</Row>
</Keyboard>

کد بالا شکل ظاهری کیبور ما را ایجا می کند هر کیبور یک کدی دارد این کد ها از بخش developer گوگل برداشته شده است.
در همان پوشه یک فایل دیگر به نام method.xml ایجاد کرده و کد زیر را در آن قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android">
    <subtype
        android:label="@string/subtype_en_US"
		android:imeSubtypeLocale="en_US"
		android:imeSubtypeMode="keyboard" />
</input-method>

یک فایل به نام keyboard.xml ایجاد کرده (در مسیر res/layout) و کد های زیرا را در آن قرار دهید.

<?xml version="1.0" encoding="UTF-8"?>
<android.inputmethodservice.KeyboardView
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/keyboard"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:keyPreviewLayout ="@layout/preview"
/>

در کد بالا خطا دارید ادامه آموزش را دنبال کنیدو
یک فایل دیگر به نام preview.xml ایجاد کرده و کد های زیر را در آن قرار دهید.

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:background="#ffff00"
    android:textStyle="bold"
    android:textSize="30sp"
    >
</TextView>

یک فایل به نام SimpleIME.java ایجاد کرده این کلاس از نوع سرویس است و کدهای زیر را در آن قرار دهید.

public class SimpleIME extends InputMethodService
    implements OnKeyboardActionListener{
    private KeyboardView kv;
    private Keyboard keyboard;
    private boolean caps = false;
    @Override
    public void onKey(int primaryCode, int[] keyCodes) {
		InputConnection ic = getCurrentInputConnection();
		playClick(primaryCode);
		switch(primaryCode){
		case Keyboard.KEYCODE_DELETE :
			ic.deleteSurroundingText(1, 0);
			break;
		case Keyboard.KEYCODE_SHIFT:
			caps = !caps;
			keyboard.setShifted(caps);
			kv.invalidateAllKeys();
			break;
		case Keyboard.KEYCODE_DONE:
			ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
			break;
		default:
			char code = (char)primaryCode;
			if(Character.isLetter(code) && caps){
				code = Character.toUpperCase(code);
			}
			ic.commitText(String.valueOf(code),1);
		}
    }
    @Override
    public void onPress(int primaryCode) {
    }
   @Override
    public View onCreateInputView() {
    kv = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard, null);
    keyboard = new Keyboard(this, R.xml.qwerty);
    kv.setKeyboard(keyboard);
    kv.setOnKeyboardActionListener(this);
    return kv;
     }
    @Override
    public void onRelease(int primaryCode) {
    }
    @Override
    public void onText(CharSequence text) {
    }
    @Override
    public void swipeDown() {
    }
    @Override
    public void swipeLeft() {
    }
    @Override
    public void swipeRight() {
    }
    @Override
    public void swipeUp() {
    }
}

سپس وارد AndroidManifest.xml شده و کد زیر را قرار دهید.

<service android:name=".SimpleIME"
    android:label="@string/simple_ime"
    android:permission="android.permission.BIND_INPUT_METHOD"
    >
    <meta-data android:name="android.view.im" android:resource="@xml/method"/>
    <intent-filter>
        <action android:name="android.view.InputMethod" />
    </intent-filter>
</service>

 
این آموزش هم به پایان رسید.
 
موفق و موید باشید.
 

مطالعه بیشتر