আমি একটি কাস্টম কীবোর্ড তৈরি করতে চাই। এক্সএমএল এবং জাভা ব্যবহার করে এটি কীভাবে করা যায় তা আমি জানি না। নীচের ছবিটি আমি তৈরি করতে চাইছি এমন একটি মডেল। এটির জন্য কেবল সংখ্যা প্রয়োজন।
আমি একটি কাস্টম কীবোর্ড তৈরি করতে চাই। এক্সএমএল এবং জাভা ব্যবহার করে এটি কীভাবে করা যায় তা আমি জানি না। নীচের ছবিটি আমি তৈরি করতে চাইছি এমন একটি মডেল। এটির জন্য কেবল সংখ্যা প্রয়োজন।
উত্তর:
সবার আগে আপনার একটি keyboard.xml
ফাইলের প্রয়োজন হবে যা res/xml
ফোল্ডারে স্থাপন করা হবে (যদি ফোল্ডারটি উপস্থিত না থাকে তবে এটি তৈরি করে)।
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="15%p"
android:keyHeight="15%p" >
<Row>
<Key android:codes="1" android:keyLabel="1" android:horizontalGap="4%p"/>
<Key android:codes="2" android:keyLabel="2" android:horizontalGap="4%p"/>
<Key android:codes="3" android:keyLabel="3" android:horizontalGap="4%p" />
<Key android:codes="4" android:keyLabel="4" android:horizontalGap="4%p" />
<Key android:codes="5" android:keyLabel="5" android:horizontalGap="4%p" />
</Row>
<Row>
<Key android:codes="6" android:keyLabel="6" android:horizontalGap="4%p"/>
<Key android:codes="7" android:keyLabel="7" android:horizontalGap="4%p"/>
<Key android:codes="8" android:keyLabel="8" android:horizontalGap="4%p" />
<Key android:codes="9" android:keyLabel="9" android:horizontalGap="4%p" />
<Key android:codes="0" android:keyLabel="0" android:horizontalGap="4%p" />
</Row>
<Row>
<Key android:codes="-1" android:keyIcon="@drawable/backspace" android:keyWidth="34%p" android:horizontalGap="4%p"/>
<Key android:codes="100" android:keyLabel="Enter" android:keyWidth="53%p" android:horizontalGap="4%p"/>
</Row>
</Keyboard>
** মনে রাখবেন যে আপনাকে backspace
আঁকতে সক্ষম তৈরি করতে হবে এবং খুব ছোট আকারের (18x18 পিক্সেলের মতো) এর সাথে রেস / ড্রয়যোগ্য-এলডিপিআই ফোল্ডারে রাখতে হবে
তারপরে যে এক্সএমএল ফাইলটি আপনি এটি ব্যবহার করতে চান (যেখানে আপনার টেক্সটভিউটি রয়েছে) আপনার নিম্নলিখিত কোডটি যুক্ত করা উচিত:
<RelativeLayout
...
>
.....
<android.inputmethodservice.KeyboardView
android:id="@+id/keyboardview"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:focusable="true"
android:focusableInTouchMode="true"
android:visibility="gone"
/>
......
</RelativeLayout>
** লক্ষ্য করুন XML ফাইল যা আপনি স্থাপন করবে android.inputmethodservice.KeyboardView
এ, হতে হয়েছে RelativeLayout
যাতে সেট পাবে alignParentBottom="true"
(সাধারণত কীবোর্ড পর্দার নীচে উপস্থাপন করা হয়)
তারপরে আপনার কীবোর্ডটি সংযুক্ত করতে চান এমন হ্যান্ডেলগুলির onCreate
ফাংশনে আপনাকে নীচের কোডটি যুক্ত করতে হবেActivity
TextView
// Create the Keyboard
mKeyboard= new Keyboard(this,R.xml.keyboard);
// Lookup the KeyboardView
mKeyboardView= (KeyboardView)findViewById(R.id.keyboardview);
// Attach the keyboard to the view
mKeyboardView.setKeyboard( mKeyboard );
// Do not show the preview balloons
//mKeyboardView.setPreviewEnabled(false);
// Install the key handler
mKeyboardView.setOnKeyboardActionListener(mOnKeyboardActionListener);
** নোট করুন mKeyboard
এবং mKeyboardView
আপনার তৈরি করতে হবে এমন প্রাইভেট ক্লাস ভেরিয়েবল।
তারপরে আপনার কীবোর্ড খোলার জন্য নিম্নলিখিত ফাংশনটি প্রয়োজন (আপনাকে অবশ্যই এটি onClick
এক্সএমএল সম্পত্তি মাধ্যমে টেক্সটভিউয়ের সাথে যুক্ত করতে হবে )
public void openKeyboard(View v)
{
mKeyboardView.setVisibility(View.VISIBLE);
mKeyboardView.setEnabled(true);
if( v!=null)((InputMethodManager)getSystemService(Activity.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(v.getWindowToken(), 0);
}
এবং অবশেষে আপনার প্রয়োজন এটি OnKeyboardActionListener
আপনার ইভেন্টগুলি পরিচালনা করবে
private OnKeyboardActionListener mOnKeyboardActionListener = new OnKeyboardActionListener() {
@Override public void onKey(int primaryCode, int[] keyCodes)
{
//Here check the primaryCode to see which key is pressed
//based on the android:codes property
if(primaryCode==1)
{
Log.i("Key","You just pressed 1 button");
}
}
@Override public void onPress(int arg0) {
}
@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() {
}
};
আশা করি এইটি কাজ করবে!!!
বেশিরভাগ কোড এখানে পাওয়া যায়
এই উত্তরটি কীভাবে একটি কাস্টম সিস্টেম কীবোর্ড তৈরি করতে পারে যা কোনও ব্যবহারকারী তাদের ফোনে ইনস্টল করা কোনও অ্যাপ্লিকেশনটিতে ব্যবহার করা যেতে পারে। আপনি যদি এমন কোনও কীবোর্ড তৈরি করতে চান যা কেবলমাত্র নিজের অ্যাপের মধ্যেই ব্যবহৃত হবে, তবে আমার অন্য উত্তরটি দেখুন ।
নীচের উদাহরণটি এর মতো দেখাবে। যে কোনও কীবোর্ড বিন্যাসের জন্য আপনি এটি পরিবর্তন করতে পারেন।
নিম্নলিখিত পদক্ষেপগুলি কীভাবে একটি কার্যকরী কাস্টম সিস্টেম কীবোর্ড তৈরি করবেন তা দেখায়। যথাসম্ভব আমি যে কোনও অপ্রয়োজনীয় কোড সরিয়ে দেওয়ার চেষ্টা করেছি। যদি আপনার প্রয়োজন মতো অন্যান্য বৈশিষ্ট্য থাকে তবে আমি আরও সাহায্যের লিঙ্কগুলি শেষে দিয়েছি।
আমি আমার প্রকল্পটির নাম "কাস্টম কীবোর্ড" রেখেছি। আপনি যা চান এটি কল করুন। এখানে বিশেষ কিছু নেই। আমি কেবল MainActivity
এবং "হ্যালো ওয়ার্ল্ড!" ছাড়ব এটি যেমন লেআউট।
আপনার অ্যাপের res/layout
ফোল্ডারে নিম্নলিখিত দুটি ফাইল যুক্ত করুন :
keyboard_view.xml
এই দৃশ্যটি একটি ধারক যা আমাদের কীবোর্ডকে ধারণ করবে। এই উদাহরণে কেবল একটি কীবোর্ড রয়েছে তবে আপনি অন্যান্য কীবোর্ডগুলি যুক্ত করতে এবং এটিকে এখান থেকে বাইরে স্যুপে করতে পারেন KeyboardView
।
<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:keyPreviewLayout="@layout/key_preview"
android:layout_alignParentBottom="true">
</android.inputmethodservice.KeyboardView>
key_preview.xml
কী প্রাকদর্শন হ'ল একটি লেআউট যা আপনি কীবোর্ড কী টিপলে পপ আপ হয়। এটি কেবল আপনি কীটি চাপছেন তা দেখায় (আপনার বড়, চর্বিযুক্ত আঙ্গুলগুলি এটি coveringেকে রাখার ক্ষেত্রে)। এটি একাধিক পছন্দ পপআপ নয়। যে আপনি চেক আউট উচিত প্রার্থীদের দৃশ্য ।
<?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="@android:color/white"
android:textColor="@android:color/black"
android:textSize="30sp">
</TextView>
xml
আপনার res
ফোল্ডারে একটি ফোল্ডার তৈরি করুন । (ডান ক্লিক করুন res
এবং নতুন> ডিরেক্টরি নির্বাচন করুন ।)
তারপরে এটিতে নিম্নলিখিত দুটি এক্সএমএল ফাইল যুক্ত করুন। ( xml
ফোল্ডারে রাইট ক্লিক করুন এবং নতুন> এক্সএমএল রিসোর্স ফাইলটি চয়ন করুন ))
number_pad.xml
এখান থেকেই এটি আরও আকর্ষণীয় হতে শুরু করে। এটি কীগুলিরKeyboard
বিন্যাস নির্ধারণ করে ।
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="20%p"
android:horizontalGap="5dp"
android:verticalGap="5dp"
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" android:keyEdgeFlags="right"/>
</Row>
<Row>
<Key android:codes="54" android:keyLabel="6" android:keyEdgeFlags="left"/>
<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="-5"
android:keyLabel="DELETE"
android:keyWidth="40%p"
android:keyEdgeFlags="left"
android:isRepeatable="true"/>
<Key android:codes="10"
android:keyLabel="ENTER"
android:keyWidth="60%p"
android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
এখানে কিছু বিষয় লক্ষণীয়:
keyWidth
: এটি প্রতিটি কী-এর ডিফল্ট প্রস্থ। এর 20%p
মানে হল যে প্রতিটি কী পি এর প্রস্থের 20% প্রস্থ গ্রহণ করতে পারে । এটি পৃথক কীগুলির দ্বারা ওভাররাইড করা যেতে পারে, যদিও আপনি দেখতে পাচ্ছেন তৃতীয় সারিতে মুছে ফেলুন এবং এন্টার কীগুলি দিয়ে।keyHeight
: এটি এখানে কঠোরভাবে কোড করা হয়েছে তবে আপনি @dimen/key_height
বিভিন্ন স্ক্রিন আকারের জন্য এটি গতিশীল সেট করার মতো কিছু ব্যবহার করতে পারেন ।Gap
: অনুভূমিক এবং উল্লম্ব ফাঁকটি কীগুলির মধ্যে কতটা জায়গা ছেড়ে যাবে তা বলে দেয়। এমনকি যদি আপনি এটি সেট করে থাকেন 0px
তবে এখনও একটি ছোট ফাঁক রয়েছে।codes
: এটি একটি ইউনিকোড বা কাস্টম কোড মান হতে পারে যা কী চাপলে কী ঘটে বা ইনপুট কী তা নির্ধারণ করে। আপনি keyOutputText
যদি আরও দীর্ঘ ইউনিকোড স্ট্রিং ইনপুট করতে চান তা দেখুন ।keyLabel
: এটি কীতে প্রদর্শিত টেক্সট।keyEdgeFlags
: কীটি কোন প্রান্তে প্রান্তিক হওয়া উচিত তা এটি নির্দেশ করে।isRepeatable
: আপনি কীটি ধরে রাখলে এটি ইনপুটটি পুনরাবৃত্তি করতে থাকবে।method.xml
এই ফাইলটি সিস্টেমে উপলব্ধ ইনপুট পদ্ধতি সাব টাইপগুলি বলে tells আমি এখানে একটি সর্বনিম্ন সংস্করণ অন্তর্ভুক্ত করছি।
<?xml version="1.0" encoding="utf-8"?>
<input-method
xmlns:android="http://schemas.android.com/apk/res/android">
<subtype
android:imeSubtypeMode="keyboard"/>
</input-method>
একটি নতুন জাভা ফাইল তৈরি করুন। এটি কল করুন MyInputMethodService
। এই ফাইলটি সবকিছুকে একসাথে বাঁধে। এটি কীবোর্ড থেকে প্রাপ্ত ইনপুট পরিচালনা করে এবং যা দেখায় তা এটিকে প্রেরণ করে ( EditText
উদাহরণস্বরূপ)।
public class MyInputMethodService extends InputMethodService implements KeyboardView.OnKeyboardActionListener {
@Override
public View onCreateInputView() {
// get the KeyboardView and add our Keyboard layout to it
KeyboardView keyboardView = (KeyboardView) getLayoutInflater().inflate(R.layout.keyboard_view, null);
Keyboard keyboard = new Keyboard(this, R.xml.number_pad);
keyboardView.setKeyboard(keyboard);
keyboardView.setOnKeyboardActionListener(this);
return keyboardView;
}
@Override
public void onKey(int primaryCode, int[] keyCodes) {
InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
switch (primaryCode) {
case Keyboard.KEYCODE_DELETE:
CharSequence selectedText = ic.getSelectedText(0);
if (TextUtils.isEmpty(selectedText)) {
// no selection, so delete previous character
ic.deleteSurroundingText(1, 0);
} else {
// delete the selection
ic.commitText("", 1);
}
break;
default:
char code = (char) primaryCode;
ic.commitText(String.valueOf(code), 1);
}
}
@Override
public void onPress(int primaryCode) { }
@Override
public void onRelease(int primaryCode) { }
@Override
public void onText(CharSequence text) { }
@Override
public void swipeLeft() { }
@Override
public void swipeRight() { }
@Override
public void swipeDown() { }
@Override
public void swipeUp() { }
}
মন্তব্য:
OnKeyboardActionListener
কীবোর্ড ইনপুট জন্য শোনেন। এই উদাহরণে এই সমস্ত খালি পদ্ধতিও প্রয়োজন।InputConnection
মতো অন্য ভিউতে ইনপুট প্রেরণে ব্যবহৃত হয় EditText
।আমি এটিকে প্রথমের চেয়ে শেষ করে দিয়েছি কারণ এটি ইতিমধ্যে উপরে উল্লিখিত ফাইলগুলিকে বোঝায়। আপনার কাস্টম কীবোর্ডকে সিস্টেম কীবোর্ড হিসাবে নিবন্ধভুক্ত service
করতে আপনার অ্যান্ড্রয়েডম্যানিয়েস্ট.এক্সএমএল ফাইলটিতে একটি বিভাগ যুক্ত করতে হবে। application
পরে বিভাগে রাখুন activity
।
<manifest ...>
<application ... >
<activity ... >
...
</activity>
<service
android:name=".MyInputMethodService"
android:label="Keyboard Display Name"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod"/>
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@xml/method"/>
</service>
</application>
</manifest>
এটাই! আপনার অ্যাপ্লিকেশনটি এখনই চালানো উচিত। তবে, আপনি সেটিংসে আপনার কীবোর্ড সক্ষম না করা পর্যন্ত আপনি বেশি কিছু দেখতে পাবেন না।
আপনার কীবোর্ডটি ব্যবহার করতে চান এমন প্রতিটি ব্যবহারকারীকে এন্ড্রয়েড সেটিংসে এটি সক্ষম করতে হবে। এটি কীভাবে করবেন সে সম্পর্কে বিশদ নির্দেশাবলীর জন্য নীচের লিঙ্কটি দেখুন:
এখানে একটি সংক্ষিপ্তসার দেওয়া হল:
আপনি এখন অ্যান্ড্রয়েডে টাইপ করতে পারেন এমন কোনও জায়গায় আপনার কীবোর্ডটি ব্যবহার করতে সক্ষম হওয়া উচিত।
উপরের কীবোর্ডটি ব্যবহারযোগ্য, তবে অন্যান্য লোকেরা আপনাকে ব্যবহার করতে চাইবে এমন একটি কীবোর্ড তৈরি করতে আপনাকে সম্ভবত আরও কার্যকারিতা যুক্ত করতে হবে। কীভাবে তা জানতে নীচের লিঙ্কগুলি অধ্যয়ন করুন।
মানটি কীভাবে KeyboardView
দেখায় এবং আচরণ করে তা পছন্দ করেন না ? আমি অবশ্যই না। দেখে মনে হচ্ছে এটি অ্যান্ড্রয়েড 2.0 এর পরে আপডেট হয়নি। প্লে স্টোর those সমস্ত কাস্টম কীবোর্ড সম্পর্কে কী? তারা উপরের কুরুচিপূর্ণ কীবোর্ডের মতো কিছু দেখায় না।
সুসংবাদটি হ'ল আপনি নিজের কীবোর্ডের চেহারা এবং আচরণটিকে সম্পূর্ণ কাস্টমাইজ করতে পারেন। আপনাকে নিম্নলিখিত জিনিসগুলি করতে হবে:
ViewGroup
। আপনি এটিতে Button
গুলি পূরণ করতে পারেন বা এমনকি আপনার নিজের কাস্টম কী দর্শনগুলি উপশ্রেণীতে তৈরি করতে পারে View
। আপনি যদি পপআপ ভিউ ব্যবহার করেন তবে এটি নোট করুন ।onKeyClicked(String text)
বা onBackspace()
।keyboard_view.xml
, key_preview.xml
বা number_pad.xml
বর্ণিত হওয়ার দরকার নেই কারণ এগুলি সমস্ত স্ট্যান্ডার্ডের জন্য KeyboardView
। আপনি আপনার কাস্টম ভিউতে এই সমস্ত UI দিকগুলি পরিচালনা করবেন।MyInputMethodService
ক্লাসে, কীবোর্ড শ্রোতার যে আপনি আপনার কীবোর্ড শ্রেণিতে সংজ্ঞায়িত করেছেন তা প্রয়োগ করুন। এটি এর জায়গায় রয়েছে KeyboardView.OnKeyboardActionListener
, যার আর দরকার নেই।MyInputMethodService
শ্রেণীর onCreateInputView()
পদ্ধতিতে আপনার কাস্টম কীবোর্ডের একটি উদাহরণ তৈরি করুন এবং ফিরে আসুন। কীবোর্ডের কাস্টম শ্রোতাদের এতে সেট করতে ভুলবেন না this
।এই উত্তরটি আপনাকে জানায় কীভাবে আপনার অ্যাপ্লিকেশনটির মধ্যে একচেটিয়াভাবে কাস্টম কীবোর্ড তৈরি করা যায়। যদি আপনি এমন কোনও সিস্টেম কীবোর্ড তৈরি করতে চান যা কোনও অ্যাপ্লিকেশনটিতে ব্যবহার করা যায় তবে আমার অন্যান্য উত্তরটি দেখুন ।
উদাহরণটি এর মতো দেখবে। যে কোনও কীবোর্ড বিন্যাসের জন্য আপনি এটি পরিবর্তন করতে পারেন।
আমি আমার প্রকল্পের নাম রেখেছি InAppKeyboard
। আপনার যা খুশি কল করুন।
কিবোর্ডের ভিত্তি ধরণ
res/layout
ফোল্ডারে একটি বিন্যাস ফাইল যুক্ত করুন । আমি আমার ফোন keyboard
। কীবোর্ডটি একটি কাস্টম যৌগিক ভিউ হবে যা আমরা এই এক্সএমএল লেআউট ফাইল থেকে স্ফীত করব। আপনি কীগুলি বিন্যাস করতে পছন্দ করেন না কেন আপনি তা ব্যবহার করতে পারেন তবে আমি একটি ব্যবহার করছি LinearLayout
। merge
ট্যাগগুলি নোট করুন ।
মাঝামাঝি / লেআউট / keyboard.xml
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button_1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1"/>
<Button
android:id="@+id/button_2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2"/>
<Button
android:id="@+id/button_3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3"/>
<Button
android:id="@+id/button_4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4"/>
<Button
android:id="@+id/button_5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button_6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6"/>
<Button
android:id="@+id/button_7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7"/>
<Button
android:id="@+id/button_8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8"/>
<Button
android:id="@+id/button_9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9"/>
<Button
android:id="@+id/button_0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:id="@+id/button_delete"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Delete"/>
<Button
android:id="@+id/button_enter"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="Enter"/>
</LinearLayout>
</LinearLayout>
</merge>
ক্রিয়াকলাপ বিন্যাস
প্রদর্শনের উদ্দেশ্যে আমাদের ক্রিয়াকলাপটির একটি একক রয়েছে EditText
এবং কীবোর্ডটি নীচে রয়েছে। আমি আমার কাস্টম কীবোর্ড ভিউ কল করেছি MyKeyboard
। (আমরা শীঘ্রই এই কোডটি যুক্ত করব তাই আপাতত ত্রুটিটি উপেক্ষা করুন)) আমাদের সমস্ত কীবোর্ড কোডটি একক দৃষ্টিতে রাখার সুবিধা হ'ল এটি অন্য ক্রিয়াকলাপ বা অ্যাপ্লিকেশনটিতে পুনরায় ব্যবহার করা সহজ করে।
মাঝামাঝি / লেআউট / activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.inappkeyboard.MainActivity">
<EditText
android:id="@+id/editText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#c9c9f1"
android:layout_margin="50dp"
android:padding="5dp"
android:layout_alignParentTop="true"/>
<com.example.inappkeyboard.MyKeyboard
android:id="@+id/keyboard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
একটি নতুন জাভা ফাইল যুক্ত করুন। আমি আমার ফোন MyKeyboard
।
এখানে সবচেয়ে লক্ষণীয় বিষয়টি লক্ষ্য করুন যে কোনওর সাথে EditText
বা এর কোনও হার্ড লিঙ্ক নেই Activity
। এটি এটিকে যে কোনও অ্যাপ্লিকেশন বা ক্রিয়াকলাপের প্রয়োজন হিসাবে এটি প্লাগ করা সহজ করে তোলে। এই কাস্টম কীবোর্ড InputConnection
ভিউটিতে একটিও ব্যবহৃত হয়, যা কোনও সিস্টেমের কীবোর্ডের সাথে যেভাবে যোগাযোগ করে তা নকল করে EditText
। এভাবেই আমরা কঠোর লিঙ্কগুলি এড়িয়ে চলি।
MyKeyboard
আমরা এমন একটি যৌগিক দৃষ্টিভঙ্গি যা উপরে বর্ণিত সংজ্ঞা বিন্যাসকে স্ফীত করে।
MyKeyboard.java
public class MyKeyboard extends LinearLayout implements View.OnClickListener {
// constructors
public MyKeyboard(Context context) {
this(context, null, 0);
}
public MyKeyboard(Context context, AttributeSet attrs) {
this(context, attrs, 0);
}
public MyKeyboard(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init(context, attrs);
}
// keyboard keys (buttons)
private Button mButton1;
private Button mButton2;
private Button mButton3;
private Button mButton4;
private Button mButton5;
private Button mButton6;
private Button mButton7;
private Button mButton8;
private Button mButton9;
private Button mButton0;
private Button mButtonDelete;
private Button mButtonEnter;
// This will map the button resource id to the String value that we want to
// input when that button is clicked.
SparseArray<String> keyValues = new SparseArray<>();
// Our communication link to the EditText
InputConnection inputConnection;
private void init(Context context, AttributeSet attrs) {
// initialize buttons
LayoutInflater.from(context).inflate(R.layout.keyboard, this, true);
mButton1 = (Button) findViewById(R.id.button_1);
mButton2 = (Button) findViewById(R.id.button_2);
mButton3 = (Button) findViewById(R.id.button_3);
mButton4 = (Button) findViewById(R.id.button_4);
mButton5 = (Button) findViewById(R.id.button_5);
mButton6 = (Button) findViewById(R.id.button_6);
mButton7 = (Button) findViewById(R.id.button_7);
mButton8 = (Button) findViewById(R.id.button_8);
mButton9 = (Button) findViewById(R.id.button_9);
mButton0 = (Button) findViewById(R.id.button_0);
mButtonDelete = (Button) findViewById(R.id.button_delete);
mButtonEnter = (Button) findViewById(R.id.button_enter);
// set button click listeners
mButton1.setOnClickListener(this);
mButton2.setOnClickListener(this);
mButton3.setOnClickListener(this);
mButton4.setOnClickListener(this);
mButton5.setOnClickListener(this);
mButton6.setOnClickListener(this);
mButton7.setOnClickListener(this);
mButton8.setOnClickListener(this);
mButton9.setOnClickListener(this);
mButton0.setOnClickListener(this);
mButtonDelete.setOnClickListener(this);
mButtonEnter.setOnClickListener(this);
// map buttons IDs to input strings
keyValues.put(R.id.button_1, "1");
keyValues.put(R.id.button_2, "2");
keyValues.put(R.id.button_3, "3");
keyValues.put(R.id.button_4, "4");
keyValues.put(R.id.button_5, "5");
keyValues.put(R.id.button_6, "6");
keyValues.put(R.id.button_7, "7");
keyValues.put(R.id.button_8, "8");
keyValues.put(R.id.button_9, "9");
keyValues.put(R.id.button_0, "0");
keyValues.put(R.id.button_enter, "\n");
}
@Override
public void onClick(View v) {
// do nothing if the InputConnection has not been set yet
if (inputConnection == null) return;
// Delete text or input key value
// All communication goes through the InputConnection
if (v.getId() == R.id.button_delete) {
CharSequence selectedText = inputConnection.getSelectedText(0);
if (TextUtils.isEmpty(selectedText)) {
// no selection, so delete previous character
inputConnection.deleteSurroundingText(1, 0);
} else {
// delete the selection
inputConnection.commitText("", 1);
}
} else {
String value = keyValues.get(v.getId());
inputConnection.commitText(value, 1);
}
}
// The activity (or some parent or controller) must give us
// a reference to the current EditText's InputConnection
public void setInputConnection(InputConnection ic) {
this.inputConnection = ic;
}
}
সিস্টেম কীবোর্ডগুলির জন্য, কীবোর্ডকে ফোকাসে দেখানোর জন্য অ্যান্ড্রয়েড একটি ইনপুটমেথডম্যানেজার ব্যবহার করে EditText
। এই উদাহরণে, ক্রিয়াকলাপটি EditText
আমাদের কাস্টম কীবোর্ড থেকে লিঙ্কটি সরবরাহ করে এর স্থান গ্রহণ করবে ।
যেহেতু আমরা সিস্টেম কীবোর্ড ব্যবহার করছি না, তাই স্পর্শ করার সময় এটিকে পপিং করা থেকে রক্ষা করার জন্য আমাদের এটি অক্ষম করতে হবে EditText
। দ্বিতীয়ত, আমাদের InputConnection
থেকে এটিটি নেওয়া EditText
এবং এটি আমাদের কীবোর্ডে দেওয়া দরকার।
MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
EditText editText = (EditText) findViewById(R.id.editText);
MyKeyboard keyboard = (MyKeyboard) findViewById(R.id.keyboard);
// prevent system keyboard from appearing when EditText is tapped
editText.setRawInputType(InputType.TYPE_CLASS_TEXT);
editText.setTextIsSelectable(true);
// pass the InputConnection from the EditText to the keyboard
InputConnection ic = editText.onCreateInputConnection(new EditorInfo());
keyboard.setInputConnection(ic);
}
}
যদি আপনার ক্রিয়াকলাপের একাধিক এডিটেক্সট থাকে তবে ডান এডিটেক্সটগুলি InputConnection
কীবোর্ডে পাস করার জন্য আপনার কোড লিখতে হবে । (আপনি একটি যোগ করে এটা করতে পারেন OnFocusChangeListener
এবং OnClickListener
EditTexts করতে। দেখুন এই নিবন্ধটি যে আলোচনার জন্য।) এছাড়াও আপনি লুকাতে চান বা উপযুক্ত সময়ে আপনার কীবোর্ড দেখাতে পারে।
এটাই. আপনার এখন উদাহরণ অ্যাপ্লিকেশন চালানো এবং পছন্দসই হিসাবে পাঠ্য ইনপুট করতে বা মুছতে সক্ষম হওয়া উচিত। আপনার পরবর্তী পদক্ষেপটি আপনার নিজের প্রয়োজনের সাথে মানিয়ে নেওয়ার জন্য সমস্ত কিছু সংশোধন করা। উদাহরণস্বরূপ, আমার কয়েকটি কীবোর্ডে আমি বোতামগুলির চেয়ে টেক্সটভিউগুলি ব্যবহার করেছি কারণ সেগুলি কাস্টমাইজ করা সহজ।
TextView
বরং একটি Button
আপনি কী ভালো বানাতে চান। তারপরে, ব্যাকগ্রাউন্ডটিকে এমন একটি অঙ্কনযোগ্য করে তুলুন যা চাপার সময় উপস্থিতির অবস্থার পরিবর্তন করে।View
এবং সেই সাবক্লাসটি কাস্টম কীবোর্ডগুলি ViewGroup
। কীবোর্ড প্রোগ্রামগুলি সমস্ত কীগুলি রাখে। কীগুলি কীবোর্ডের সাথে যোগাযোগের জন্য একটি ইন্টারফেস ব্যবহার করে (টুকরোগুলি কীভাবে কোনও ক্রিয়াকলাপের সাথে যোগাযোগ করে তার অনুরূপ)। আপনার কেবলমাত্র একটি একক কীবোর্ড লেআউট প্রয়োজন হলে এক্সএমএল লেআউট এটির জন্য ঠিক কাজ করে। তবে আমি কী নিয়ে কাজ করছি তার উদাহরণ দেখতে চাইলে এখানে সমস্ত ক্লাস Key*
এবং Keyboard*
ক্লাস পরীক্ষা করে দেখুন । মনে রাখবেন যে আমি সেখানে একটি ধারক ভিউও ব্যবহার করি যার কাজটি কী-বোর্ডগুলিকে অভ্যন্তরীণভাবে স্যুপ করা হয়।InputMethodManager#showInputMethodPicker()
। মূল কীবোর্ডে যদি এমন কী না থাকে তবে, ব্যবহারকারীরা আপনার কীবোর্ডে স্যুইচ করতে পারে কেবলমাত্র সেটিংস সেটিংসে এটি ম্যানুয়ালি করা। অ্যাপল এই অঞ্চলে অ্যান্ড্রয়েডের চেয়ে উচ্চতর, কারণ অ্যাপলকে একটি কীবোর্ড স্যুইচিং কী থাকাতে সমস্ত কী-বোর্ড প্রয়োজন।
EditText
স থাকে তবে আপনাকে সেগুলিতে একটি যুক্ত করতে হবে onFocusChangedListener
যাতে তারা ফোকাস পাওয়ার পরে আপনি InputConnection
বর্তমানটি EditText
আপনার কাস্টম কীবোর্ডে নির্ধারণ করতে পারেন ।
ব্যবহার KeyboardView
:
KeyboardView kbd = new KeyboardView(context);
kbd.setKeyboard(new Keyboard(this, R.xml.custom));
kbd.setOnKeyboardActionListener(new OnKeyboardActionListener() {
....
}
এখন আপনি kbd
যা দেখতে একটি স্বাভাবিক দেখুন।
এ সম্পর্কে দুর্দান্ত জিনিসটি হ'ল R.xml.custom
উল্লেখ করে /res/xml/custom.xml
যা কীবোর্ডের লেআউট x x বিন্যাসে সংজ্ঞায়িত করে। এই ফাইলে আরও তথ্যের জন্য এখানে দেখুন: কীবোর্ড , কীবোর্ড.রো , কীবোর্ড.কি ।
এখানে একটি নরম কীবোর্ডের জন্য একটি নমুনা প্রকল্প।
https://developer.android.com/guide/topics/text/creating-input-method.html
আপনার ভিন্ন ভিন্ন বিন্যাসের সাথে একই লাইনে হওয়া উচিত।
সম্পাদনা করুন: আপনার অ্যাপ্লিকেশনটিতে আপনার যদি কীবোর্ডের প্রয়োজন হয় তবে এটি খুব সহজ! উল্লম্ব অভিযোজন সহ একটি রৈখিক বিন্যাস তৈরি করুন এবং আনুভূমিক অবস্থানের সাথে এর ভিতরে 3 লিনিয়ার বিন্যাস তৈরি করুন। তারপরে সেই প্রতিটি অনুভূমিক লিনিয়ার লেআউটে প্রতিটি সারির বোতামগুলি রাখুন এবং বোতামগুলিতে ওজনের সম্পত্তি বরাদ্দ করুন। অ্যান্ড্রয়েড: লেআউট_ওয়েট = তাদের সবার জন্য 1 ব্যবহার করুন, যাতে তারা সমানভাবে ব্যবধান পান।
এটি সমাধান করবে। আপনি যদি যা প্রত্যাশিত ছিল তা যদি না পেয়ে থাকেন তবে দয়া করে কোডটি এখানে পোস্ট করুন এবং আপনাকে সহায়তা করতে আমরা এখানে আছি!
আমি খুঁজে পেয়েছি অন্যতম সেরা ডকুমেন্টেড উদাহরণ।
http://www.fampennings.nl/maarten/android/09keyboard/index.htm
KeyboardView
সম্পর্কিত এক্সএমএল ফাইল এবং উত্স কোড সরবরাহ করা হয়।
আমি সম্প্রতি নিজের পোস্টটি জুড়ে এসেছি যখন আমি নিজের কাস্টম কীবোর্ড তৈরি করতে কোন পদ্ধতিটি ব্যবহার করতে হবে তা সিদ্ধান্ত নেওয়ার চেষ্টা করছিলাম। আমি অ্যান্ড্রয়েড সিস্টেমের এপিআই খুব সীমাবদ্ধ বলে মনে করেছি, তাই আমি নিজের ইন-অ্যাপ কীবোর্ড তৈরি করার সিদ্ধান্ত নিয়েছি। সুরাগের উত্তরটিকে আমার গবেষণার ভিত্তি হিসাবে ব্যবহার করে আমি নিজের কীবোর্ড উপাদানটি ডিজাইন করতে গিয়েছিলাম । এটি এমআইটি লাইসেন্স সহ গিটহাবে পোস্ট করা হয়েছে। আশা করি এটি অন্য কারও অনেক সময় এবং মাথাব্যথা বাঁচাবে।
স্থাপত্যটি বেশ নমনীয়। একটি মূল দৃষ্টিভঙ্গি (কাস্টমকিবোর্ডভিউ) রয়েছে যা আপনি চাইলে যে কোনও কীবোর্ড বিন্যাস এবং নিয়ামক দিয়ে ইনজেক্ট করতে পারেন।
আপনাকে কেবল আপনার ক্রিয়াকলাপের এক্সএমএলতে কাস্টমকিবোর্ডভিউ ঘোষণা করতে হবে (আপনি এটি প্রোগ্রামালিও করতে পারেন):
<com.donbrody.customkeyboard.components.keyboard.CustomKeyboardView
android:id="@+id/customKeyboardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
তারপরে এটির সাথে আপনার এডিটেক্সটটি নিবন্ধ করুন এবং তাদের কী ধরণের কীবোর্ড ব্যবহার করা উচিত তা বলুন:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val numberField: EditText = findViewById(R.id.testNumberField)
val numberDecimalField: EditText = findViewById(R.id.testNumberDecimalField)
val qwertyField: EditText = findViewById(R.id.testQwertyField)
keyboard = findViewById(R.id.customKeyboardView)
keyboard.registerEditText(CustomKeyboardView.KeyboardType.NUMBER, numberField)
keyboard.registerEditText(CustomKeyboardView.KeyboardType.NUMBER_DECIMAL, numberDecimalField)
keyboard.registerEditText(CustomKeyboardView.KeyboardType.QWERTY, qwertyField)
}
কাস্টমকিবোর্ডভিউ বাকিটি পরিচালনা করে!
আমি একটি নম্বর, সংখ্যা ডেসিমাল এবং কিউবার্টি কীবোর্ড দিয়ে বল ঘূর্ণায়মান পেয়েছি। এটি ডাউনলোড করতে নির্দ্বিধায় আপনার নিজস্ব বিন্যাস এবং নিয়ামক তৈরি করুন। দেখে মনে হচ্ছে:
এমনকি যদি আপনি যে আর্কিটেকচারটি না দিয়ে যান সিদ্ধান্ত নিয়েছেন, তবে আশা করি কোনও অ্যাপ্লিকেশন কীবোর্ডের জন্য সোর্স কোডটি পাওয়া সহায়ক হবে।
আবার, প্রকল্পটির লিঙ্কটি এখানে: কাস্টম ইন-অ্যাপ কীবোর্ড
ঠিক আছে সুরাগ এতক্ষণে সেরা উত্তর দিয়েছেন তবে তিনি অ্যাপটি সংকলন করার জন্য গুরুত্বপূর্ণ কিছু ছোটখাটো জিনিস এড়িয়ে গেছেন।
আমি তার উত্তরে উন্নতি করে সুরগের চেয়ে আরও ভাল উত্তর দেওয়ার আশাবাদী। তিনি যে সব গায়েবি উপাদান রেখেছিলেন তা আমি যুক্ত করব।
আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশন, APK বিল্ডার 1.1.0 ব্যবহার করে আমার এপিকে সংকলন করেছি। সুতরাং শুরু করা যাক।
একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করতে আমাদের এমন কয়েকটি ফাইল এবং ফোল্ডার দরকার যা একটি নির্দিষ্ট বিন্যাসে সংগঠিত হয় এবং সে অনুযায়ী মূলধন তৈরি করা হয়।
পুনরায় লেআউট -> অ্যাপ্লিকেশন ফোনে কীভাবে প্রদর্শিত হবে তা চিত্রিত করে xML ফাইলগুলি। ওয়েব পৃষ্ঠাগুলি ব্রাউজারে দেখতে কীভাবে এইচটিএমএল আকার দেয় to সেই অনুযায়ী আপনার অ্যাপ্লিকেশনটিকে স্ক্রিনে ফিট করার অনুমতি দিচ্ছে।
মান -> ধ্রুবক ডেটা যেমন রং.এক্সএমএল, স্ট্রিং.এক্সএমএল, স্টাইল.এক্সএমএল। এই ফাইলগুলি অবশ্যই সঠিকভাবে বানান করতে হবে।
অঙ্কনযোগ্য -> ছবিগুলি {jpeg, png, ...}; তাদের কিছু নাম।
mipmap -> আরও ছবি। অ্যাপ আইকন জন্য ব্যবহৃত?
xML -> আরও এক্সএমএল ফাইল।
src -> HTML এ জাভাস্ক্রিপ্টের মতো কাজ করে। লেআউট ফাইলগুলি প্রারম্ভিক দৃশ্যের সূচনা করবে এবং আপনার জাভা ফাইলটি গতিরূপে ট্যাগ উপাদানগুলি এবং ট্রিগার ইভেন্টগুলি নিয়ন্ত্রণ করবে। এইচটিএমএলের মতো ইভেন্টগুলি সরাসরি লেআউট.এক্সএমএলে সক্রিয়ও করা যেতে পারে।
অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল -> এই ফাইলটি আপনার অ্যাপ্লিকেশনটি কী তা নিবন্ধভুক্ত করে। অ্যাপ্লিকেশন নাম, প্রোগ্রামের ধরণ, অনুমতিগুলির প্রয়োজন ইত্যাদি ইত্যাদি এটি অ্যান্ড্রয়েডকে বরং নিরাপদ বলে মনে হয়। প্রোগ্রামগুলি ম্যানিফেস্টে আক্ষরিক অর্থে যা চায়নি তা করতে পারে না।
এখন এখানে 4 ধরণের অ্যান্ড্রয়েড প্রোগ্রাম রয়েছে, একটি ক্রিয়াকলাপ, একটি পরিষেবা, একটি সামগ্রী সরবরাহকারী এবং একটি সম্প্রচার গ্রহণকারী। আমাদের কীবোর্ডটি একটি পরিষেবা হবে, যা এটি পটভূমিতে চালানোর অনুমতি দেয়। এটি অ্যাপ্লিকেশনগুলির তালিকায় প্রদর্শিত হবে না; তবে এটি আনইনস্টল করা যায়।
আপনার অ্যাপ্লিকেশনটি সংকলন করতে গ্রেডেল এবং অ্যাপ্লিকেশন স্বাক্ষর জড়িত। আপনি এটির গবেষণা করতে পারেন বা অ্যান্ড্রয়েডের জন্য APK বিল্ডার ব্যবহার করতে পারেন। এটি অত্যন্ত সহজ।
এখন যেহেতু আমরা অ্যান্ড্রয়েড বিকাশ বুঝতে পারি, আসুন আমরা ফাইল এবং ফোল্ডারগুলি তৈরি করি।
আমি উপরে আলোচনা হিসাবে ফাইল এবং ফোল্ডার তৈরি করুন। আমার ডিরেক্টরিটি নীচে যেমন দেখতে পাবেন:
মনে রাখবেন আপনি যদি অ্যান্ড্রয়েড স্টুডিওর মতো কোনও আদর্শ ব্যবহার করছেন তবে এতে কোনও প্রকল্পের ফাইল থাকতে পারে।
উত্তর: নামপ্যাড / রেজ / লেআউট / কী_প্রিভিউ.এক্সএমএল
<?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="@android:color/white"
android:textColor="@android:color/black"
android:textSize="30sp">
</TextView>
বি: নুমপ্যাড / রেজ / লেআউট / কীবোর্ড_ভিউ.এক্সএমএল
<?xml version="1.0" encoding="utf-8"?>
<android.inputmethodservice.KeyboardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/keyboard_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:keyPreviewLayout="@layout/key_preview"
android:layout_alignParentBottom="true">
</android.inputmethodservice.KeyboardView>
সি: নুমপ্যাড / রেজো / এক্সএমএল / মেথড.এক্সএমএল
<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android">
<subtype android:imeSubtypeMode="keyboard"/>
</input-method>
ডি: নামপ্যাড / রেজো / এক্সএমএল / সংখ্যা_প্যাড.এক্সএমএল
<?xml version="1.0" encoding="utf-8"?>
<Keyboard xmlns:android="http://schemas.android.com/apk/res/android"
android:keyWidth="20%p"
android:horizontalGap="5dp"
android:verticalGap="5dp"
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" android:keyEdgeFlags="right"/>
</Row>
<Row>
<Key android:codes="54" android:keyLabel="6" android:keyEdgeFlags="left"/>
<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="-5"
android:keyLabel="DELETE"
android:keyWidth="40%p"
android:keyEdgeFlags="left"
android:isRepeatable="true"/>
<Key android:codes="10"
android:keyLabel="ENTER"
android:keyWidth="60%p"
android:keyEdgeFlags="right"/>
</Row>
</Keyboard>
অবশ্যই এটি সহজেই আপনার পছন্দ অনুসারে সম্পাদনা করা যেতে পারে। এমনকি আপনি লেবেলের পরিবর্তে চিত্রগুলি lf শব্দ ব্যবহার করতে পারেন।
সুরগ মূল্য মান ফোল্ডারে ফাইলগুলি প্রদর্শন করে নি এবং ধরে নিয়েছিল যে আমাদের অ্যান্ড্রয়েড স্টুডিওতে অ্যাক্সেস রয়েছে; যা স্বয়ংক্রিয়ভাবে এগুলি তৈরি করে। আমার কাছে APK বিল্ডার ভাল জিনিস।
ই: নুমপ্যাড / রেস / মান / রং.এক্সএমএল
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
এফ: নুমপ্যাড / রেস / মান / স্ট্রিং.এক্সএমএল
<resources>
<string name="app_name">Suragch NumPad</string>
</resources>
জি: নুমপ্যাড / রেস / মান / শৈলী.এক্সএমএল
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Material.Light.DarkActionBar">
<!-- Customize your theme here. -->
</style>
</resources>
এইচ: নম্প্যাড / অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল
এই ফাইলটি যা সত্যিই কনটেনশনের জন্য ছিল। এখানে আমি অনুভব করেছি যে আমি কখনই আমার প্রোগ্রামটি সংকলন করব না। ফোঁপানোর। ফোঁপানোর। আপনি যদি সুরাকের উত্তরটি পরীক্ষা করেন তবে আপনি দেখতে পাচ্ছেন যে তিনি ক্ষেত্রের প্রথম সেটটি খালি রেখেছেন এবং এই ফাইলে ক্রিয়াকলাপ যুক্ত করেছেন। আমি যেমন বলেছি চার ধরণের অ্যান্ড্রয়েড প্রোগ্রাম রয়েছে। কোনও ক্রিয়াকলাপ লঞ্চ আইকন সহ একটি নিয়মিত অ্যাপ। এই নামপ্যাড কোনও ক্রিয়াকলাপ নয়! আরও তিনি কোনও তৎপরতা প্রয়োগ করেননি।
আমার বন্ধুরা ক্রিয়াকলাপটি অন্তর্ভুক্ত করে না। আপনার প্রোগ্রামটি সংকলন করবে এবং আপনি যখন এটি চালু করার চেষ্টা করবেন তখন এটি ক্র্যাশ হয়ে যাবে! এক্সএমএলএনএস হিসাবে: অ্যান্ড্রয়েড এবং ইউজড-এসডিকে; আমি তোমাকে সেখানে সাহায্য করতে পারি না তারা যদি কাজ করে তবে কেবল আমার সেটিংস ব্যবহার করে দেখুন।
আপনি দেখতে পাচ্ছেন একটি সার্ভিস ট্যাগ রয়েছে, যা এটি পরিষেবা হিসাবে নিবন্ধিত করে। এছাড়াও সার্ভিস.এন্ড্রয়েড: নামটি অবশ্যই আমাদের জাভা ফাইলে সর্বজনীন বর্ধনের পরিষেবাটির নাম হতে হবে। এটি সেই অনুযায়ী মূলধন করা দরকার। এছাড়াও প্যাকেজ হল প্যাকেজটির নাম যা আমরা জাভা ফাইলে ঘোষণা করেছিলাম is
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="Saragch.num_pad">
<uses-sdk
android:minSdkVersion="12"
android:targetSdkVersion="27" />
<application
android:allowBackup="true"
android:icon="@drawable/Suragch_NumPad_icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<service
android:name=".MyInputMethodService"
android:label="Keyboard Display Name"
android:permission="android.permission.BIND_INPUT_METHOD">
<intent-filter>
<action android:name="android.view.InputMethod"/>
</intent-filter>
<meta-data
android:name="android.view.im"
android:resource="@xml/method"/>
</service>
</application>
</manifest>
আমি: নুমপ্যাড / এসআরসি / সারাগাচ / নাম_প্যাড / মাই ইনপুটমেডসোর্সেস.জভা
দ্রষ্টব্য: আমি মনে করি জাভা এসআরসি-র বিকল্প।
এটি অন্য সমস্যা ফাইল ছিল তবে ম্যানিফেস্ট ফাইলের মতো তর্কযোগ্য নয়। আমি যেমন জাভা জানি তেমন ভাল কি তা কী, কোনটি নয় know আমি সবেমাত্র এক্সএমএল জানি এবং এটি অ্যান্ড্রয়েড বিকাশের সাথে কীভাবে জড়িত!
এখানে সমস্যা হ'ল তিনি কিছু আমদানি করেননি! মানে, তিনি আমাদের একটি "সম্পূর্ণ" ফাইল দিয়েছেন যা নামগুলি সমাধান করে যা সমাধান করা যায় না! ইনপুটমেথড সার্ভিস, কীবোর্ড ইত্যাদি bad এটি খারাপ অনুশীলন মিঃ সুরগ্চ। আমাকে সাহায্য করার জন্য ধন্যবাদ তবে নামগুলি সমাধান না করা আপনি কোডটি সংকলন করার কীভাবে প্রত্যাশা করেছিলেন?
নিম্নলিখিতটি সঠিকভাবে সম্পাদিত সংস্করণ। ঠিক কী আমদানি করতে হবে তা শিখতে আমাকে ঠিক জায়গায় নিয়ে যাওয়ার জন্য আমি কেবল দু'টি ইশারায় ঝাঁপিয়ে পড়েছি।
package Saragch.num_pad;
import android.inputmethodservice.InputMethodService;
import android.inputmethodservice.KeyboardView;
import android.inputmethodservice.Keyboard;
import android.text.TextUtils;
import android.view.inputmethod.InputConnection;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MyInputMethodService extends InputMethodService implements KeyboardView.OnKeyboardActionListener
{
@Override
public View onCreateInputView()
{
// get the KeyboardView and add our Keyboard layout to it
KeyboardView keyboardView = (KeyboardView)getLayoutInflater().inflate(R.layout.keyboard_view, null);
Keyboard keyboard = new Keyboard(this, R.xml.number_pad);
keyboardView.setKeyboard(keyboard);
keyboardView.setOnKeyboardActionListener(this);
return keyboardView;
}
@Override
public void onKey(int primaryCode, int[] keyCodes)
{
InputConnection ic = getCurrentInputConnection();
if (ic == null) return;
switch (primaryCode)
{
case Keyboard.KEYCODE_DELETE:
CharSequence selectedText = ic.getSelectedText(0);
if (TextUtils.isEmpty(selectedText))
{
// no selection, so delete previous character
ic.deleteSurroundingText(1, 0);
}
else
{
// delete the selection
ic.commitText("", 1);
}
ic.deleteSurroundingText(1, 0);
break;
default:
char code = (char) primaryCode;
ic.commitText(String.valueOf(code), 1);
}
}
@Override
public void onPress(int primaryCode) { }
@Override
public void onRelease(int primaryCode) { }
@Override
public void onText(CharSequence text) { }
@Override
public void swipeLeft() { }
@Override
public void swipeRight() { }
@Override
public void swipeDown() { }
@Override
public void swipeUp() { }
}
আপনার প্রকল্পটি সংকলন এবং স্বাক্ষর করুন।
এখানেই আমি একজন নবীনবী অ্যান্ড্রয়েড বিকাশকারী হিসাবে নির্বিঘ্ন। আমি এটি ম্যানুয়ালি শিখতে চাই, কারণ আমার বিশ্বাস সত্যিকারের প্রোগ্রামাররা ম্যানুয়ালি সংকলন করতে পারে।
আমি মনে করি এপিকে সংকলন এবং প্যাকেজিংয়ের অন্যতম গ্রেড গ্রেডল। জিপি ফাইলের জন্য এপিকে জার ফাইল বা রারের মতো বলে মনে হচ্ছে। তারপরে স্বাক্ষর দুটি ধরণের হয়। ডিবাগ কী যা প্লে স্টোর এবং ব্যক্তিগত কীতে প্রকাশিত হয় না।
ওয়েল মিঃ সারাগচকে একটা হাত দিন। এবং আমার ভিডিও দেখার জন্য আপনাকে ধন্যবাদ। লাইক, সাবস্ক্রাইব।
একই সমস্যা ছিল। আমি প্রথমে টেবিল লেআউটটি ব্যবহার করেছি তবে একটি বোতাম টিপানোর পরে লেআউটটি পরিবর্তন হতে থাকে। যদিও এই পৃষ্ঠাটি খুব দরকারী খুঁজে পেয়েছে। http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-creating-a-numeric-keypad-with-gridlayout/