আপনি কীভাবে অ্যান্ড্রয়েডে একটি কাস্টম কীবোর্ড তৈরি করতে পারেন?


105

আমি একটি কাস্টম কীবোর্ড তৈরি করতে চাই। এক্সএমএল এবং জাভা ব্যবহার করে এটি কীভাবে করা যায় তা আমি জানি না। নীচের ছবিটি আমি তৈরি করতে চাইছি এমন একটি মডেল। এটির জন্য কেবল সংখ্যা প্রয়োজন।

এখানে চিত্র বর্ণনা লিখুন


6
[অ্যান্ড্রয়েড ডিভাইসগুলির জন্য এক্সএমএল লেআউটগুলি ব্যবহার করে আপনার নিজস্ব কাস্টম কীবোর্ড তৈরি করুন] ( টিউটোরিয়ালস-
Android.blogspot.com/2011/06/…

1
টুটস-এ একটি ভাল টিউটোরিয়াল রয়েছে: লিঙ্ক
হামেদ গাদিরিয়ান

গুগলের একটি নমুনা "সফটকিবোর্ড" প্রকল্প রয়েছে, বা এখানে প্রচুর সংস্থান সংযুক্ত রয়েছে: কাস্টমকিবোর্ডডেটেলস.ব্লগস্পট.কম
২০১৮

উত্তর:


83

সবার আগে আপনার একটি 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ফাংশনে আপনাকে নীচের কোডটি যুক্ত করতে হবেActivityTextView

    // 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() {
    }
};

আশা করি এইটি কাজ করবে!!!

বেশিরভাগ কোড এখানে পাওয়া যায়


1
আমি কী না চাইলে পর্দার নীচে কিবোর্ডটি থাকে? (উদাঃ আমি চাই যে ব্যবহারকারী এটি এড়াতে সক্ষম হবেন)) এটাই কি আমি আমার কীবোর্ড অ্যাপের মাধ্যমে নিয়ন্ত্রণ করতে পারি বা এটি অ্যান্ড্রয়েড সিস্টেম দ্বারা পরিচালিত হয়?
ব্যবহারকারী3294126

কীবোর্ডের প্রস্থটি সমস্ত স্ক্রিনে পূরণ করার জন্য আমার কী করা উচিত তা পূরণ করছে না
জর্জ থমাস

কী-বোর্ডভিউতে থাকা প্যারেন্ট লেআউটটি কী? এছাড়াও আপনি কী-বোর্ডভিউয়ের লেআউট_পথটি পরীক্ষা করেছেন ??
পন্টিওস

1
দয়া করে সচেতন থাকুন যে কীবোর্ডভিউ এবং কীবোর্ড ক্লাসগুলি এপিআই স্তর ২৯ থেকে গুগল অবহেলিত So
মেক্স

কীবোর্ডভিউ গুগল দ্বারা অবচয় করা হয়। নতুন সমাধান কি?
তোহিদমাহউমদভন্ড

78

সিস্টেম কীবোর্ড

এই উত্তরটি কীভাবে একটি কাস্টম সিস্টেম কীবোর্ড তৈরি করতে পারে যা কোনও ব্যবহারকারী তাদের ফোনে ইনস্টল করা কোনও অ্যাপ্লিকেশনটিতে ব্যবহার করা যেতে পারে। আপনি যদি এমন কোনও কীবোর্ড তৈরি করতে চান যা কেবলমাত্র নিজের অ্যাপের মধ্যেই ব্যবহৃত হবে, তবে আমার অন্য উত্তরটি দেখুন

নীচের উদাহরণটি এর মতো দেখাবে। যে কোনও কীবোর্ড বিন্যাসের জন্য আপনি এটি পরিবর্তন করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

নিম্নলিখিত পদক্ষেপগুলি কীভাবে একটি কার্যকরী কাস্টম সিস্টেম কীবোর্ড তৈরি করবেন তা দেখায়। যথাসম্ভব আমি যে কোনও অপ্রয়োজনীয় কোড সরিয়ে দেওয়ার চেষ্টা করেছি। যদি আপনার প্রয়োজন মতো অন্যান্য বৈশিষ্ট্য থাকে তবে আমি আরও সাহায্যের লিঙ্কগুলি শেষে দিয়েছি।

1. একটি নতুন অ্যান্ড্রয়েড প্রকল্প শুরু করুন

আমি আমার প্রকল্পটির নাম "কাস্টম কীবোর্ড" রেখেছি। আপনি যা চান এটি কল করুন। এখানে বিশেষ কিছু নেই। আমি কেবল MainActivityএবং "হ্যালো ওয়ার্ল্ড!" ছাড়ব এটি যেমন লেআউট।

2. লেআউট ফাইল যুক্ত করুন

আপনার অ্যাপের res/layoutফোল্ডারে নিম্নলিখিত দুটি ফাইল যুক্ত করুন :

  • keyboard_view.xml
  • key_preview.xml

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
  • method.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

5. ম্যানিফেস্ট আপডেট করুন

আমি এটিকে প্রথমের চেয়ে শেষ করে দিয়েছি কারণ এটি ইতিমধ্যে উপরে উল্লিখিত ফাইলগুলিকে বোঝায়। আপনার কাস্টম কীবোর্ডকে সিস্টেম কীবোর্ড হিসাবে নিবন্ধভুক্ত 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>

এটাই! আপনার অ্যাপ্লিকেশনটি এখনই চালানো উচিত। তবে, আপনি সেটিংসে আপনার কীবোর্ড সক্ষম না করা পর্যন্ত আপনি বেশি কিছু দেখতে পাবেন না।

6. সেটিংসে কীবোর্ড সক্ষম করুন

আপনার কীবোর্ডটি ব্যবহার করতে চান এমন প্রতিটি ব্যবহারকারীকে এন্ড্রয়েড সেটিংসে এটি সক্ষম করতে হবে। এটি কীভাবে করবেন সে সম্পর্কে বিশদ নির্দেশাবলীর জন্য নীচের লিঙ্কটি দেখুন:

এখানে একটি সংক্ষিপ্তসার দেওয়া হল:

  • অ্যান্ড্রয়েড সেটিংস> ভাষা এবং ইনপুট> বর্তমান কীবোর্ড> কীবোর্ড চয়ন করুন।
  • তালিকায় আপনার কাস্টম কীবোর্ডটি দেখতে হবে। এটি সক্ষম করুন।
  • ফিরে যান এবং আবার বর্তমান কীবোর্ড চয়ন করুন। তালিকায় আপনার কাস্টম কীবোর্ডটি দেখতে হবে। এটি চয়ন করুন।

আপনি এখন অ্যান্ড্রয়েডে টাইপ করতে পারেন এমন কোনও জায়গায় আপনার কীবোর্ডটি ব্যবহার করতে সক্ষম হওয়া উচিত।

আরও অধ্যয়ন

উপরের কীবোর্ডটি ব্যবহারযোগ্য, তবে অন্যান্য লোকেরা আপনাকে ব্যবহার করতে চাইবে এমন একটি কীবোর্ড তৈরি করতে আপনাকে সম্ভবত আরও কার্যকারিতা যুক্ত করতে হবে। কীভাবে তা জানতে নীচের লিঙ্কগুলি অধ্যয়ন করুন।

যাচ্ছে

মানটি কীভাবে KeyboardViewদেখায় এবং আচরণ করে তা পছন্দ করেন না ? আমি অবশ্যই না। দেখে মনে হচ্ছে এটি অ্যান্ড্রয়েড 2.0 এর পরে আপডেট হয়নি। প্লে স্টোর those সমস্ত কাস্টম কীবোর্ড সম্পর্কে কী? তারা উপরের কুরুচিপূর্ণ কীবোর্ডের মতো কিছু দেখায় না।

সুসংবাদটি হ'ল আপনি নিজের কীবোর্ডের চেহারা এবং আচরণটিকে সম্পূর্ণ কাস্টমাইজ করতে পারেন। আপনাকে নিম্নলিখিত জিনিসগুলি করতে হবে:

  1. আপনার নিজস্ব কীবোর্ড দৃশ্য উপশ্রেণী যে তৈরি করুন ViewGroup। আপনি এটিতে Buttonগুলি পূরণ করতে পারেন বা এমনকি আপনার নিজের কাস্টম কী দর্শনগুলি উপশ্রেণীতে তৈরি করতে পারে View। আপনি যদি পপআপ ভিউ ব্যবহার করেন তবে এটি নোট করুন
  2. আপনার কীবোর্ডে একটি কাস্টম ইভেন্ট শ্রোতা ইন্টারফেস যুক্ত করুন। কিছু পছন্দ তার পদ্ধতি কল onKeyClicked(String text)বা onBackspace()
  3. উপরের দিকনির্দেশগুলিতে আপনাকে যোগ করতে keyboard_view.xml, key_preview.xmlবা number_pad.xmlবর্ণিত হওয়ার দরকার নেই কারণ এগুলি সমস্ত স্ট্যান্ডার্ডের জন্য KeyboardView। আপনি আপনার কাস্টম ভিউতে এই সমস্ত UI দিকগুলি পরিচালনা করবেন।
  4. আপনার MyInputMethodServiceক্লাসে, কীবোর্ড শ্রোতার যে আপনি আপনার কীবোর্ড শ্রেণিতে সংজ্ঞায়িত করেছেন তা প্রয়োগ করুন। এটি এর জায়গায় রয়েছে KeyboardView.OnKeyboardActionListener, যার আর দরকার নেই।
  5. আপনার MyInputMethodServiceশ্রেণীর onCreateInputView()পদ্ধতিতে আপনার কাস্টম কীবোর্ডের একটি উদাহরণ তৈরি করুন এবং ফিরে আসুন। কীবোর্ডের কাস্টম শ্রোতাদের এতে সেট করতে ভুলবেন না this

35

অ্যাপ-অ্যাপ্লিকেশন কীবোর্ড

এই উত্তরটি আপনাকে জানায় কীভাবে আপনার অ্যাপ্লিকেশনটির মধ্যে একচেটিয়াভাবে কাস্টম কীবোর্ড তৈরি করা যায়। যদি আপনি এমন কোনও সিস্টেম কীবোর্ড তৈরি করতে চান যা কোনও অ্যাপ্লিকেশনটিতে ব্যবহার করা যায় তবে আমার অন্যান্য উত্তরটি দেখুন

উদাহরণটি এর মতো দেখবে। যে কোনও কীবোর্ড বিন্যাসের জন্য আপনি এটি পরিবর্তন করতে পারেন।

এখানে চিত্র বর্ণনা লিখুন

1. একটি নতুন অ্যান্ড্রয়েড প্রকল্প শুরু করুন

আমি আমার প্রকল্পের নাম রেখেছি InAppKeyboard। আপনার যা খুশি কল করুন।

2. লেআউট ফাইল যুক্ত করুন

কিবোর্ডের ভিত্তি ধরণ

res/layoutফোল্ডারে একটি বিন্যাস ফাইল যুক্ত করুন । আমি আমার ফোন keyboard। কীবোর্ডটি একটি কাস্টম যৌগিক ভিউ হবে যা আমরা এই এক্সএমএল লেআউট ফাইল থেকে স্ফীত করব। আপনি কীগুলি বিন্যাস করতে পছন্দ করেন না কেন আপনি তা ব্যবহার করতে পারেন তবে আমি একটি ব্যবহার করছি LinearLayoutmergeট্যাগগুলি নোট করুন ।

মাঝামাঝি / লেআউট / 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এবং OnClickListenerEditTexts করতে। দেখুন এই নিবন্ধটি যে আলোচনার জন্য।) এছাড়াও আপনি লুকাতে চান বা উপযুক্ত সময়ে আপনার কীবোর্ড দেখাতে পারে।

সমাপ্ত

এটাই. আপনার এখন উদাহরণ অ্যাপ্লিকেশন চালানো এবং পছন্দসই হিসাবে পাঠ্য ইনপুট করতে বা মুছতে সক্ষম হওয়া উচিত। আপনার পরবর্তী পদক্ষেপটি আপনার নিজের প্রয়োজনের সাথে মানিয়ে নেওয়ার জন্য সমস্ত কিছু সংশোধন করা। উদাহরণস্বরূপ, আমার কয়েকটি কীবোর্ডে আমি বোতামগুলির চেয়ে টেক্সটভিউগুলি ব্যবহার করেছি কারণ সেগুলি কাস্টমাইজ করা সহজ।

মন্তব্য

  • XML বিন্যাস ফাইল, আপনি একটি ব্যবহার করতে পারে TextViewবরং একটি Buttonআপনি কী ভালো বানাতে চান। তারপরে, ব্যাকগ্রাউন্ডটিকে এমন একটি অঙ্কনযোগ্য করে তুলুন যা চাপার সময় উপস্থিতির অবস্থার পরিবর্তন করে।
  • উন্নত কাস্টম কীবোর্ডগুলি: কীবোর্ড উপস্থিতি এবং কীবোর্ড স্যুইচিংয়ে আরও নমনীয়তার জন্য, আমি এখন কাস্টম কী দর্শনগুলি তৈরি করছি যা সাবক্লাস Viewএবং সেই সাবক্লাসটি কাস্টম কীবোর্ডগুলি ViewGroup। কীবোর্ড প্রোগ্রামগুলি সমস্ত কীগুলি রাখে। কীগুলি কীবোর্ডের সাথে যোগাযোগের জন্য একটি ইন্টারফেস ব্যবহার করে (টুকরোগুলি কীভাবে কোনও ক্রিয়াকলাপের সাথে যোগাযোগ করে তার অনুরূপ)। আপনার কেবলমাত্র একটি একক কীবোর্ড লেআউট প্রয়োজন হলে এক্সএমএল লেআউট এটির জন্য ঠিক কাজ করে। তবে আমি কী নিয়ে কাজ করছি তার উদাহরণ দেখতে চাইলে এখানে সমস্ত ক্লাস Key*এবং Keyboard*ক্লাস পরীক্ষা করে দেখুন । মনে রাখবেন যে আমি সেখানে একটি ধারক ভিউও ব্যবহার করি যার কাজটি কী-বোর্ডগুলিকে অভ্যন্তরীণভাবে স্যুপ করা হয়।

আপনার উত্তর দুর্দান্ত, তবে আমরা কীভাবে একটি মূল কীবোর্ড এবং এই নতুন কীবোর্ডের মধ্যে টগলিং সেট করতে পারি।
কিশান দোঙ্গা

@ কিশনডোঙ্গা, আপনার কীবোর্ডে আপনি কীবোর্ডগুলি স্যুইচ করতে একটি কী যুক্ত করতে পারেন। ব্যবহারকারী চাপলে এটি কল করে InputMethodManager#showInputMethodPicker()। মূল কীবোর্ডে যদি এমন কী না থাকে তবে, ব্যবহারকারীরা আপনার কীবোর্ডে স্যুইচ করতে পারে কেবলমাত্র সেটিংস সেটিংসে এটি ম্যানুয়ালি করা। অ্যাপল এই অঞ্চলে অ্যান্ড্রয়েডের চেয়ে উচ্চতর, কারণ অ্যাপলকে একটি কীবোর্ড স্যুইচিং কী থাকাতে সমস্ত কী-বোর্ড প্রয়োজন।
সুরগাচ

@ কিশনডোঙ্গা, আমি ঠিক বুঝতে পেরেছি যে উত্তরটি কোনও অ্যাপ-কীবোর্ড সম্পর্কিত, সিস্টেম কীবোর্ডের বিষয়ে নয়। আপনি যদি দুটি কাস্টম কীবোর্ডের মধ্যে অদলবদল করতে চান, তবে আপনি প্রোগ্রামারিকভাবে সেগুলি ধারক দৃশ্যে এবং এর বাইরেও বদল করতে পারেন। উভয় কীবোর্ডে কেবল একটি সোয়াপ কীবোর্ড কী যুক্ত করুন। উপরের উত্তরে আমার "উন্নত কাস্টম কীবোর্ডগুলি" নোট এবং লিঙ্কটি দেখুন।
সুরগাচ

আপনি যদি নিজের কীবোর্ড এবং সিস্টেম কীবোর্ডের মধ্যে অদলবদল করতে চান, তবে সিস্টেম কীবোর্ডটি আড়াল করুন এবং যথাযথ সময়ে (এবং তদ্বিপরীত) আপনার কীবোর্ডটি দেখান।
সুরগাচ

1
@ মারেকটাকাক, আপনাকে সিস্টেম কীবোর্ড অক্ষম করতে হবে এবং প্রতিটি ক্রিয়াকলাপে আপনার কাস্টম কীবোর্ড যুক্ত করতে হবে। যদি কোনও ক্রিয়াকলাপের একাধিক EditTextস থাকে তবে আপনাকে সেগুলিতে একটি যুক্ত করতে হবে onFocusChangedListenerযাতে তারা ফোকাস পাওয়ার পরে আপনি InputConnectionবর্তমানটি EditTextআপনার কাস্টম কীবোর্ডে নির্ধারণ করতে পারেন ।
সুরগাচ

31

ব্যবহার 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 বিন্যাসে সংজ্ঞায়িত করে। এই ফাইলে আরও তথ্যের জন্য এখানে দেখুন: কীবোর্ড , কীবোর্ড.রো , কীবোর্ড.কি


2
আমি কীবোর্ডভিউ ক্লাসটি ব্যবহার করছি, তবে এপিআই 29 হিসাবে এটি এখন অবচয় করা হয়েছে।
অভিজিৎ

14

এখানে একটি নরম কীবোর্ডের জন্য একটি নমুনা প্রকল্প।

https://developer.android.com/guide/topics/text/creating-input-method.html

আপনার ভিন্ন ভিন্ন বিন্যাসের সাথে একই লাইনে হওয়া উচিত।

সম্পাদনা করুন: আপনার অ্যাপ্লিকেশনটিতে আপনার যদি কীবোর্ডের প্রয়োজন হয় তবে এটি খুব সহজ! উল্লম্ব অভিযোজন সহ একটি রৈখিক বিন্যাস তৈরি করুন এবং আনুভূমিক অবস্থানের সাথে এর ভিতরে 3 লিনিয়ার বিন্যাস তৈরি করুন। তারপরে সেই প্রতিটি অনুভূমিক লিনিয়ার লেআউটে প্রতিটি সারির বোতামগুলি রাখুন এবং বোতামগুলিতে ওজনের সম্পত্তি বরাদ্দ করুন। অ্যান্ড্রয়েড: লেআউট_ওয়েট = তাদের সবার জন্য 1 ব্যবহার করুন, যাতে তারা সমানভাবে ব্যবধান পান।

এটি সমাধান করবে। আপনি যদি যা প্রত্যাশিত ছিল তা যদি না পেয়ে থাকেন তবে দয়া করে কোডটি এখানে পোস্ট করুন এবং আপনাকে সহায়তা করতে আমরা এখানে আছি!


সম্পাদনাটি আসলে খারাপ কারণ এর অর্থ হ'ল কীবোর্ড সর্বদা প্রদর্শিত হয় এবং স্টক অ্যান্ড্রয়েড কীবোর্ডের মতো আচরণ করবে না।
m0skit0

6

আমি খুঁজে পেয়েছি অন্যতম সেরা ডকুমেন্টেড উদাহরণ।

http://www.fampennings.nl/maarten/android/09keyboard/index.htm

KeyboardView সম্পর্কিত এক্সএমএল ফাইল এবং উত্স কোড সরবরাহ করা হয়।


1
কীবোর্ডভিউ এখন হ্রাস করা হয়েছে
আলবার্তো এম

4

আমি সম্প্রতি নিজের পোস্টটি জুড়ে এসেছি যখন আমি নিজের কাস্টম কীবোর্ড তৈরি করতে কোন পদ্ধতিটি ব্যবহার করতে হবে তা সিদ্ধান্ত নেওয়ার চেষ্টা করছিলাম। আমি অ্যান্ড্রয়েড সিস্টেমের এপিআই খুব সীমাবদ্ধ বলে মনে করেছি, তাই আমি নিজের ইন-অ্যাপ কীবোর্ড তৈরি করার সিদ্ধান্ত নিয়েছি। সুরাগের উত্তরটিকে আমার গবেষণার ভিত্তি হিসাবে ব্যবহার করে আমি নিজের কীবোর্ড উপাদানটি ডিজাইন করতে গিয়েছিলাম । এটি এমআইটি লাইসেন্স সহ গিটহাবে পোস্ট করা হয়েছে। আশা করি এটি অন্য কারও অনেক সময় এবং মাথাব্যথা বাঁচাবে।

স্থাপত্যটি বেশ নমনীয়। একটি মূল দৃষ্টিভঙ্গি (কাস্টমকিবোর্ডভিউ) রয়েছে যা আপনি চাইলে যে কোনও কীবোর্ড বিন্যাস এবং নিয়ামক দিয়ে ইনজেক্ট করতে পারেন।

আপনাকে কেবল আপনার ক্রিয়াকলাপের এক্সএমএলতে কাস্টমকিবোর্ডভিউ ঘোষণা করতে হবে (আপনি এটি প্রোগ্রামালিও করতে পারেন):

    <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)
}

কাস্টমকিবোর্ডভিউ বাকিটি পরিচালনা করে!

আমি একটি নম্বর, সংখ্যা ডেসিমাল এবং কিউবার্টি কীবোর্ড দিয়ে বল ঘূর্ণায়মান পেয়েছি। এটি ডাউনলোড করতে নির্দ্বিধায় আপনার নিজস্ব বিন্যাস এবং নিয়ামক তৈরি করুন। দেখে মনে হচ্ছে:

অ্যান্ড্রয়েড কাস্টম কীবোর্ড জিএফ ল্যান্ডস্কেপ

এখানে চিত্র বর্ণনা লিখুন

এমনকি যদি আপনি যে আর্কিটেকচারটি না দিয়ে যান সিদ্ধান্ত নিয়েছেন, তবে আশা করি কোনও অ্যাপ্লিকেশন কীবোর্ডের জন্য সোর্স কোডটি পাওয়া সহায়ক হবে।

আবার, প্রকল্পটির লিঙ্কটি এখানে: কাস্টম ইন-অ্যাপ কীবোর্ড


2

ঠিক আছে সুরাগ এতক্ষণে সেরা উত্তর দিয়েছেন তবে তিনি অ্যাপটি সংকলন করার জন্য গুরুত্বপূর্ণ কিছু ছোটখাটো জিনিস এড়িয়ে গেছেন।

আমি তার উত্তরে উন্নতি করে সুরগের চেয়ে আরও ভাল উত্তর দেওয়ার আশাবাদী। তিনি যে সব গায়েবি উপাদান রেখেছিলেন তা আমি যুক্ত করব।

আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশন, APK বিল্ডার 1.1.0 ব্যবহার করে আমার এপিকে সংকলন করেছি। সুতরাং শুরু করা যাক।

একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন তৈরি করতে আমাদের এমন কয়েকটি ফাইল এবং ফোল্ডার দরকার যা একটি নির্দিষ্ট বিন্যাসে সংগঠিত হয় এবং সে অনুযায়ী মূলধন তৈরি করা হয়।

পুনরায় লেআউট -> অ্যাপ্লিকেশন ফোনে কীভাবে প্রদর্শিত হবে তা চিত্রিত করে xML ফাইলগুলি। ওয়েব পৃষ্ঠাগুলি ব্রাউজারে দেখতে কীভাবে এইচটিএমএল আকার দেয় to সেই অনুযায়ী আপনার অ্যাপ্লিকেশনটিকে স্ক্রিনে ফিট করার অনুমতি দিচ্ছে।

মান -> ধ্রুবক ডেটা যেমন রং.এক্সএমএল, স্ট্রিং.এক্সএমএল, স্টাইল.এক্সএমএল। এই ফাইলগুলি অবশ্যই সঠিকভাবে বানান করতে হবে।

অঙ্কনযোগ্য -> ছবিগুলি {jpeg, png, ...}; তাদের কিছু নাম।

mipmap -> আরও ছবি। অ্যাপ আইকন জন্য ব্যবহৃত?

xML -> আরও এক্সএমএল ফাইল।

src -> HTML এ জাভাস্ক্রিপ্টের মতো কাজ করে। লেআউট ফাইলগুলি প্রারম্ভিক দৃশ্যের সূচনা করবে এবং আপনার জাভা ফাইলটি গতিরূপে ট্যাগ উপাদানগুলি এবং ট্রিগার ইভেন্টগুলি নিয়ন্ত্রণ করবে। এইচটিএমএলের মতো ইভেন্টগুলি সরাসরি লেআউট.এক্সএমএলে সক্রিয়ও করা যেতে পারে।

অ্যান্ড্রয়েড ম্যানিফেস্ট.এক্সএমএল -> এই ফাইলটি আপনার অ্যাপ্লিকেশনটি কী তা নিবন্ধভুক্ত করে। অ্যাপ্লিকেশন নাম, প্রোগ্রামের ধরণ, অনুমতিগুলির প্রয়োজন ইত্যাদি ইত্যাদি এটি অ্যান্ড্রয়েডকে বরং নিরাপদ বলে মনে হয়। প্রোগ্রামগুলি ম্যানিফেস্টে আক্ষরিক অর্থে যা চায়নি তা করতে পারে না।

এখন এখানে 4 ধরণের অ্যান্ড্রয়েড প্রোগ্রাম রয়েছে, একটি ক্রিয়াকলাপ, একটি পরিষেবা, একটি সামগ্রী সরবরাহকারী এবং একটি সম্প্রচার গ্রহণকারী। আমাদের কীবোর্ডটি একটি পরিষেবা হবে, যা এটি পটভূমিতে চালানোর অনুমতি দেয়। এটি অ্যাপ্লিকেশনগুলির তালিকায় প্রদর্শিত হবে না; তবে এটি আনইনস্টল করা যায়।

আপনার অ্যাপ্লিকেশনটি সংকলন করতে গ্রেডেল এবং অ্যাপ্লিকেশন স্বাক্ষর জড়িত। আপনি এটির গবেষণা করতে পারেন বা অ্যান্ড্রয়েডের জন্য APK বিল্ডার ব্যবহার করতে পারেন। এটি অত্যন্ত সহজ।

এখন যেহেতু আমরা অ্যান্ড্রয়েড বিকাশ বুঝতে পারি, আসুন আমরা ফাইল এবং ফোল্ডারগুলি তৈরি করি।

  1. আমি উপরে আলোচনা হিসাবে ফাইল এবং ফোল্ডার তৈরি করুন। আমার ডিরেক্টরিটি নীচে যেমন দেখতে পাবেন:

    • নামপ্যাড
      • Andro আইডি
      • src
        • Saragch
          • num_pad
            • MyInputMethodService.java
      • মাঝামাঝি
        • অঙ্কনযোগ্য
          • Suragch_NumPad_icon.png
        • বিন্যাস
          • key_preview.xml
          • keyboard_view.xml
        • XML
          • method.xml
          • number_pad.xml
        • মান
          • colors.xml
          • strings.xml
          • styles.xml

মনে রাখবেন আপনি যদি অ্যান্ড্রয়েড স্টুডিওর মতো কোনও আদর্শ ব্যবহার করছেন তবে এতে কোনও প্রকল্পের ফাইল থাকতে পারে।

  1. ফাইল লিখুন।

উত্তর: নামপ্যাড / রেজ / লেআউট / কী_প্রিভিউ.এক্সএমএল

<?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() { }
}
  1. আপনার প্রকল্পটি সংকলন এবং স্বাক্ষর করুন।

    এখানেই আমি একজন নবীনবী অ্যান্ড্রয়েড বিকাশকারী হিসাবে নির্বিঘ্ন। আমি এটি ম্যানুয়ালি শিখতে চাই, কারণ আমার বিশ্বাস সত্যিকারের প্রোগ্রামাররা ম্যানুয়ালি সংকলন করতে পারে।

আমি মনে করি এপিকে সংকলন এবং প্যাকেজিংয়ের অন্যতম গ্রেড গ্রেডল। জিপি ফাইলের জন্য এপিকে জার ফাইল বা রারের মতো বলে মনে হচ্ছে। তারপরে স্বাক্ষর দুটি ধরণের হয়। ডিবাগ কী যা প্লে স্টোর এবং ব্যক্তিগত কীতে প্রকাশিত হয় না।

ওয়েল মিঃ সারাগচকে একটা হাত দিন। এবং আমার ভিডিও দেখার জন্য আপনাকে ধন্যবাদ। লাইক, সাবস্ক্রাইব।


1

একই সমস্যা ছিল। আমি প্রথমে টেবিল লেআউটটি ব্যবহার করেছি তবে একটি বোতাম টিপানোর পরে লেআউটটি পরিবর্তন হতে থাকে। যদিও এই পৃষ্ঠাটি খুব দরকারী খুঁজে পেয়েছে। http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-creating-a-numeric-keypad-with-gridlayout/


3
স্প্যাগেটি কোথায় পাওয়া যাবে তা নিশ্চিত নয়। উদাহরণে কেবল মাত্র 5 টি লাইনের কোড প্রয়োগকারী অনক্রিট রয়েছে।
গ্লেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.