لە کۆرسی پشوو کە ٥ بابەتی لە خۆ گرتبوو، ڕوونکردنەوەی زۆرمان دا لەسەر بەشەکانی ئەندرۆید ستۆدیۆ، هەوڵی سەرەتا و کۆتایمان ئەوە بوو کە ڕوونکردنەوەکان بە شێوەیەکی ئەکادمی بێت، هەروەک پێگە جیهانیەکان بەڵام بە زمانی شیرینی کوردی چوون ئێمە پێمان واییە کە ڕوونکردنەوەی هاکەزایی وامان لێناکات کە دروست بین بەشێوەیەکی سەردەمیانە و حەز بە نوێبوونەوەی خۆمان و ئارەزووەکەمان بکەین. لەوانەیە جیاوازی ڕوونکردنەوەی هاکەزای و ئەکادمی هەر ئەوە بێت، کە هاکەزای کەسانێک دروست دەکات کە نازان و مەبەستێکیان نییە تەنها ئەوەییە کاتیان بڕوا و بێ فێڕبوون و دروستکردنی کەسایەتیەکی فیکری لە ئاستی داڕشتن و کاریزمای پێگەیاندن هەڵبەت وەک گەشەپێدەرێک یاخوود بوونیادنەری نەرمەواڵەیەک.

بابەتی ئەمڕۆکە ڕوونکردنەوەییە لەسەر کارکردن لەسەر فێربوون و داڕشتنی تەختەکلیلێکی سادە، وە ڕوونکردنەوەی چۆنیەتی و ڕێکخستنی تەختەکلیلێکە کە نیوەی پیتەکانی کوردی و ئینگلیزی پێک دەهێنن، لەگەڵ ئەوەش بەشی سەرەوەی تەختەکلیلەکە ژمارەکان پێک دەهێنن، کە بەهەمان شێوەی پیتەکان نیوەی کوردی و ئینگلیزی دەبێت، ئامانج لەم بابەتە جیاوازە لە کۆرسی پێشوو و درێژە پێدەری ئەو نییە، بەڵک و ئەمانەوێ بێجگە لە ئاستی سەرەتایی هەنگاویکی تر ببڕین و ڕوونکردنەوە بدەین بە دروستکردنی پڕۆژەکان و ڕوونکردنەوەیان بە شێوەیەکی ورد و درشت.

١. پێشەکی

کارکردنی ئێمە لەسەر Android Studioییە، کەواتە تەماشای ئەم بابەتە بکە .

سەرەتا، پڕۆژەیەکی نوێ دروست دەکەین و ناوی دەنێین (Keyboard_KU_EN)، هەنگاوەکانی تر بە دروست و گونجاوی تێپەڕێنن، ئێمە بۆ بابەتی ئەم جارە نەخشەی Empty Activity هەڵدەبژێرین، وە ناوی Activityیەکە دەنێین (keyboard_androkurd) وە ناوی Layoutش دەنێین (keyboard).

keyboard

چاوێک لەم بابەتە بکە بۆ زانیاری زۆرتر لەسەر دروستکردنی پڕۆژەیەک لە ئەندرۆید ستۆدیۆ کرتە بکە.

٣. دەسکاریکردنی Manifest

هەر تەختەکلیلێک بۆ ناسینەوەی لە سیستەمی ئەندرۆیدا (Input Method Editor (IMEێک وەردەگرێت, هەر IMEێک سوود لە پێکهاتەی Service وەردەگرێت بۆ ناسینەوەی لە AndroidManifest.xmlدا لەناویشیدا دەبێت Premissionی BIND_INPUT_METHOD وەربگرێت, وە هەروەها لە وەڵامی ئەو کردارەشدا android.view.InputMethod دابنرێت.

ئەوەی لە نێوان هەردوو تاگی Application دایە، ئەسڕینەوە و ئەم کۆدە دادەنێین:

٤. دروستکردنی Method.xml

لە پەڕگەی Manifest و تاگی Service ئەگەر سێربکەن لە ناو تاگی meta-dataدا، Method.xmlمان وەک سەرچاوە بەکاربردووە، ئەگەر بێت و ئەم پەڕگەیە دروست نەکەین، ئەوا لەکاتی کارپێکردنیدا سیستەمەکە هەڵەمان نیشان دەدات. ئەم پەڕگەییە زانیاریەکانی تایبەت بە تەختەکلیلەکەی لە خۆگرتووە یەکەم ناساندنی وەک Input Methodێک (تەختەکلیلێک)، دووەم subtypesکەی (ژێرناوی تەختەکلیلەکە). بۆ تەختەکلیلێک، subtypeکەی بنووسین en_US، ئەوا بوخچەیەک دروست دەکەین لە res بەناوی XML  ئەگەر نەبوو، وە لە ناویدا پەڕگەیەک بەناوی Method.xml دروست دەکەین، ئەمەی تێدا دادەنێین کە نموونەی ڕوونکردنەوەی سەرەوەیە بەشێوەی کۆد:

٥. دەسکاریکردنی strings.xml

پەڕگەی Strings دەکەوێتە ئەم ڕێچکەیەوە res/values/strings.xml، لە پاش چوون ئەم سێ کۆکراوەیەی دەقە زیاد دەکەین، کە بەکارمان هێناوە لە ناونانی نەرمەواڵە و تەختەکلیلەکە.

  • یەکەم: ناوی نەرمەواڵەکەیە.
  • دووەم: ناوی تەختەکلیلەکەیە.
  • سێیەم: ژێرناوی تەختەکلیلەکەیە.

پەڕگەی Strings.xml نوێبکەوە، بەم شێوەیە:

٦. پێناسکردنی نەخشەی تەختەکلیل

نەخشەی تەختەکلیل (keybaoard) تەنها لە ڕێگای KeyboardView دەبێت. وە layout_alignParentBottom بۆ دادەنێین وە ئاماژە بە true دەکەین، تا ئەوەی نەخشەکە لە خواروودا جێگیر بێت، کاتێک نیشان دەدرێت.

کاتێک پڕۆژەکەمان دروست کرد ناویی layoutکەمان نا keyboard.xml وەک و لە هەنگاوی یەک ئاماژەمان دا، دەچینە ناوی، کۆدەکانی ناوی هەمووی دەسڕینەوە و ئەمەی لە جێدا دادەنێین:

دواتر، وەک دەبینین لە keyPreviewLayout ئاماژەمان بە preview.xml کردووە، کە بریتییە لە شێوە دەرکەوتنی پیتەکان و ناوەکەیان. layoutکی بۆ دروست دەکەین لە res/layout/preview.xml و تەنها Textviewێکی تێدا دادەنێین تا ئەوەی پیتەکانی تێدا دەرکەوی،نموونەی کۆدیی:

٧. پێناسکردنی پیتەکانی تەختەکلیل

بریتییە لە پیتەکانی تەختەکلیل و شوێنی دەرکەوتنیان کە هەمووی لە پەڕگەیەکی XML جێبەجێ دەکەین. هەر پیتێک ئەم سیفاتەی دەبێت هەبێت:

  • keyLabel: ناوەڕۆکەکەی بریتییە لەو دەقەی کە نیشاندەدرێت لەکاتی کارپێکردنی تەختەکلیلەکە.
  • codes: ناوەڕۆەکەکەی بریتییە لە کۆدی پیتەکان بەشێوەی Unicode، کە دەبێتە نوێنەر بۆ پیتەکە.

بۆ نموونە: ئەگەر پیتی A دەرکەوێت و بنووسێت، لە Codesدا بۆ valueی دەنووسین 97 وە لە keyLabelیدا دەنووسین A.

ئەگەر زیاتر لە پیتێک دابنێین و  بۆ هەموویان لە Codesدا بنووسین 97، ئەوا هەموو پیتەکان لە کاتی کرتەکردن لێیدا، دەنووسن A. بۆ نموونە: 3 خانە زیاد دەکەین و هەر سێکی KeyLabelی بریتیی بێت لە A بەڵام بە سێ Codesی جیاواز، کە ئامانەن 63, 33, وە 58.

  • بۆ یەکەم لە کاتی کرتەکردندا، ئەمە ئەنجامەکەیەتی ?
  • بۆ دووەم لە کاتی کرتەکردندا، ئەمە ئەنجامەکەتی !
  • بۆ سێیەم لە کاتی کردتەکردندا، ئەمە ئەنجامەکەیەتی :

هەندێ سیفاتی تر، کە ئارەزوومەندانەیە بەکارهێینیان:

  • keyEdgeFlags: لەناویدا دەنووسرێت Right یان Left، واباوە تەنها بۆ ئەوانە دابنرێت کە دەکەونە لای ڕاست یان چەپی ڕیزێکەوە لە پیتەکان.
  • keyWidth: ئەم سیفاتە پانی پیتێک دیاری دەکات، وا باوە کە ڕێژەکە بە ڕێژەی سەدی بنووسرێت.
  • isRepeatable: بۆ ئەو پیتانە دادەنرێت کە دەست زۆر لەسەری بمێنێتەوە (نموونە وەک سڕینەوە و بۆشای دان کە پێویست دەکات دەستی لەسەر ڕابگیرێت بۆ سڕینەوەی کۆمەڵە پیتێک) ئەگەر ویست ئەم سیفاتە هەبێت ئەوا ture دادەنێیت.

پیتەکانی تەختەکیل بۆ هەر ڕیزێک، گروپێکی بۆ دادەنرێت، گونجاوە و ڕاهێنانی لەسەر بکە هەر ڕێزێک ١٠ دانە زۆرتر دامەنێ. هەر پیتێک وا گونجاوە کە پانیەکەی ڕێژەی 10% بۆ دابنرێ، لە ئاستی بەرزی هەر پیتێکیش واگونجاوە و وە پێشنیارکراوە کە بەرزی 48dp هەبێت. (بەهۆکاری ئەوەی ئێمە تەختەکلیلەمان ژمارەی لەگەڵدا دەبێت لە بەشی سەرەوەدا، ئەوا ٥ ستوون ڕیز دەکەین)

بنچینە و ڕووکاری تەختەکلیلەکە بنیاد دەنێین، سەرەتا پەڕگەیەکی نوێ دروست بکە، بەناوی qwerty.xml لە بوخچەی res/xmlدا، کۆدەکانی بسڕەوە و ئەم کۆدەکانەی لە جێدا دانێ:

ئەگەر تێبینی بکەیت، دەبینیت هەندێک لە پیتەکان لە Codes بەهای سالب لەگەڵ دانراوە، ئەم پیتانە بەهای نەگۆڕیان هەیە، بۆ نموونە دوگمەی (سڕینەوە) بەهای 5- کە ئاماژەییە بە (Keyboard.KEYCODE_DELETE)

سەرجەم پیتە کوردیەکان بەشێوەی Unicode لێرەیە:

کرتە بکە بە شێوەی PDF

تێبینی: هەر پیتێک کە کۆدی یونیکۆدەکەی وەردەگرین بۆ خانەی Codes تەنها ٣ ژمارەی ئاخیری وەردەگرین دوای ژمارە 0 پیتی x دادەنێین. بۆ نموونە ئەگەر کۆدی یونیکۆدی ژمارە ١ (U+0661) بگۆڕین بۆ Codes ئەوا بەم شێوەی لێدەکەین 0x661، وە بۆ هەموو پیتەکانی تریش.

٨. دروستکردنی Classی Service

ئەگەر بیرتان بێت لە سەرەتادا ناوی پەڕگەکەمان نا (keyboard_androkurd.java)، ئێستا دەسکاری دەکەین، درێژی دەکەینەوە بۆ (InputMethodService) ئەویش Implementی (OnKeyboardActionListener)ی دەدەینێ، کە ئەمە کاریی ئەوەییە چالاکی پیتەکان بانگ دەکات، کاتێک کرتە یاخوود دەستی ڕادەگرین لەسەر پیتەکان.

Classی keyboard_androkurd ٣ variables لەخۆدەگرێت، کە ئامانەن:

  • KeyboardView: پێناسەکردن یاخوود ئاماژەکردنە بۆ شێوە دەرکەوتنی Layout
  • Keyboard: شێوازەکان بۆ دەرکەوتی KeyboardViewییە.
  • boolean: بەکاردەهێنین بۆ Caps (واتە بۆ کەپیتاڵ و سمۆڵی پیتەکانی ئینگلیزی) بۆیی کاتێک ON بوو، پیتەکان لە سمۆڵەوە بگۆڕێت بۆ کەپیتەڵ.

ئەنجامی وتەکانی سەرەوە بە شێوەی کۆد:

پێویستە دەکات بانگی Methodی onCreateInputView بکەین بۆ دەرکەوتنی ئەوانەی کردوومانە بۆ تەختەکلیلەکە، هەموو ئەو variablesنەی دروستمان کرد لێرەدا بەکاریان دەهێنین، کۆدەکانی سەرەوە دەسکاری دەکەین و نوێیدەکینەوە لە ناو کڵاسەکەمان و دوای implements ئەمە زیاد دەکەین:

دواتر، ئەگەر بمانەوێت لە کاتی کرتە کردن لە پیتەکان دەنگێک بێت، ئەوا پێویستە سوود لە Classی AudioManger وەربگرین بۆ کارکردنی دەنگەکە، لە Android SDKدا بەشێوەیەکی ئاسای کاتێک بتەوێت ئەم کاریگەرییە ببەخشیت ئەوا Methodی playClick بەکاردەهێنرێت. (ئەم کۆدانە دوایی onKey زیاد بکە)

کۆتایی، ئێستا دەسکاری methodی onKey دەکەین و نوێی دەکەینەوە، پەیوەندیەک دروست دەکەین لە نێوان input filedکانی (خانەکانی) نەرمەواڵەکانی تر و تەختەکلیلەکە.

getCurrentInputConnection: جۆرە Methodێکە بەکاردەهێنرێت بۆ بەکارهێنانی وەرگرتنەوەی پەیوەندییەک لە input filedی (خانەکانی) نەرمەواڵەکانی تردا، چەند جۆرێک هەن:

  • commitText: بۆ زیادکردنی پیتێک یان زیاتر لە یەک پیت لە خانەیەکدا.
  • deleteSurroundingText: سڕینەوەی پیتێک یان زیاتر لە یەک پیت لە خانەیەکدا.
  • sendKeyEvent: بۆ ناردنی ڕووداوێکە، نموونە KEYCODE_ENTER، لە هەر نەرمەواڵەیەکی دەرەکیدا.

لەهەر کاتێکدا بەکاربەر کرتە دەکات لە پیتێک، ئەوا لە ڕێگای methodی onKey پەیوەندی دەکرێت بە یونیکۆدی پیتەکان، بەڵام هەندێک هۆکاری تریش هەن، نموونە:

  • ئەگەر کۆدەکە بریتیی بوو لە KEYCODE_DELETE ئەوا لە ڕێگای Methodی deleteSurroundingText پیتەکان دەسڕێتەوە،
  • ئەگەر کۆدەکە بریتیی بوو لە KEYCODE_DONE یان KEYCODE_ENTER ئەوا جۆرێکن لە event.
  • ئەگەر کۆدەکە بریتیی بوو لە KEYCODE_SHIFT، ئەوا بەکاردەهێنرێت بۆ حاڵەتی گۆڕین، نموونە پیتی Caps کە پیتەکان لە سمۆڵەوە دەگۆڕێت بۆ کەپیتەڵ و بە پێچەوانەوە. (سوود لە Methodی invalidateAllKeys وەردەگرێت)
  • هەموو کۆدەکانی تر بەشێوەیەکی ئاسایی دەگۆڕین بۆ پیتێک و دەنێرێن بۆ Input fieldکان.

نێوانی Methodی onKey نوێبکەوە، بۆ ئەمە (کە نموونەی کۆدە بۆ قسەکانی سەرەوە):

تاقیکردنەوەی تەختەکلیلەکە

دوایی ئەوەی هەموو شتێکمان بە سەرکەوتووی دروستکرد وەک ڕوونکردنەوەکە، پڕۆژەکەمان تاقیدەکینەوە و چێژ لە سەرکەوتنی کارەکەمان دەبینین: (بیرتان بێت بۆ تاقیکردنەوەی پڕۆژەکە سوود لە ئەندرۆیدی وەهمی وەردەگرین)

پڕۆژەی ئەم جارەمان لە کاتی دامەزراندنیدا نیشان نادرێت، چونکە هیچ جۆرە Activityکمان بۆ دروست نەکردووە، بۆییە دەبێت بچینە Settings و خۆمان تەختەکلیلەکە چالاک بکەین، بەم شێوەیە:

androkurd_keboard

دواتر، کاتێک چالاکمان کرد و هەڵمان بژارد وەک تەختەکلیلی سەرەکی، دەچینە هەر نەرمەواڵیەک کە بمانەوێت و تاقیکاری دەکەین (بۆ نموونە هەر نەرمەواڵەکی نامە ناردن) کرتە دەکەین لە Input Filedێک(خانەیەک) تا تەختەکلیلەکە دەربکەوێت، وە دەتوانییت بنووسیت و تاقیکاری بکەیت، ببێتە سەرەتایەکی گەشاوە بۆ دروستکردنی دانایەکی باشتر و بەتایبەتمەندتر هەروەک ئەوەیی خۆت خواستی بنیادنانتە، نموونە:

androkurd_keyboard_1

داگرتنی پڕۆژەکە:

تکاییە بۆ بەردەوامبوونمان، مافمان مەخۆ، ناوی ئەندرۆکورد وەک سەرچاوەی یەکەم بەکاربهێنە لەکاتی بڵاوکردنەوەیدا.

ئەمەش بخوێنەوە

وەنپڵەس (وەنپڵەس 5T)ی ڕاگه‌یاند بە دروشمی هەمووکات جێگیر دەبێت

ئێوارەی ئه‌مڕۆ (وەنپڵەس)ی چینی کۆنگره‌ی تایبه‌ت به‌ ڕاگه‌یاندنی مۆبایلی نوێی به‌ناوی (وەنپ…