मैं एक कस्टम कीबोर्ड बनाना चाहता हूं। मुझे नहीं पता कि एक्सएमएल और जावा का उपयोग कैसे करना है। निम्नलिखित चित्र उस कीबोर्ड का एक मॉडल है जिसे मैं बनाना चाहता हूं। इसके लिए सिर्फ नंबर चाहिए।
मैं एक कस्टम कीबोर्ड बनाना चाहता हूं। मुझे नहीं पता कि एक्सएमएल और जावा का उपयोग कैसे करना है। निम्नलिखित चित्र उस कीबोर्ड का एक मॉडल है जिसे मैं बनाना चाहता हूं। इसके लिए सिर्फ नंबर चाहिए।
जवाबों:
सबसे पहले आपको एक 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 पिक्सल) के साथ रखना होगा
फिर xml फ़ाइल में जिसे आप चाहते हैं कि इसका उपयोग किया जाए (जहां आपका टेक्स्ट व्यू है) में आपको निम्नलिखित कोड जोड़ना चाहिए:
<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
xml प्रॉपर्टी के माध्यम से TextView के साथ जोड़ना होगा )
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
कुंजी पूर्वावलोकन एक लेआउट है जो कीबोर्ड कुंजी दबाते ही पॉप अप हो जाता है। यह सिर्फ दिखाता है कि आप किस कुंजी को दबा रहे हैं (यदि आपकी बड़ी, मोटी उंगलियां इसे कवर कर रही हैं)। यह एक बहुविकल्पी पॉपअप नहीं है। उसके लिए आपको कैंडिडेट्स के दृष्टिकोण को देखना चाहिए ।
<?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 फाइलें जोड़ें। ( xml
फ़ोल्डर पर राइट क्लिक करें और नया> 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
मतलब है कि प्रत्येक कुंजी को पी arent की चौड़ाई का 20% हिस्सा लेना चाहिए । यह व्यक्तिगत कुंजी द्वारा ओवरराइड किया जा सकता है, हालांकि, जैसा कि आप देख सकते हैं कि तीसरी पंक्ति में हटाएं और दर्ज करें कुंजी के साथ हुआ।keyHeight
: यहां हार्ड कोडित है, लेकिन आप @dimen/key_height
इसे अलग-अलग स्क्रीन आकारों के लिए गतिशील रूप से सेट करने के लिए कुछ का उपयोग कर सकते हैं।Gap
: क्षैतिज और ऊर्ध्वाधर अंतर बताता है कि चाबियों के बीच कितनी जगह छोड़नी है। यहां तक कि अगर आप इसे सेट करते हैं 0px
तो भी एक छोटा सा अंतर है।codes
: यह एक यूनिकोड या कस्टम कोड मान हो सकता है जो निर्धारित करता है कि कुंजी दबाने पर क्या होता है या इनपुट क्या होता है। देखें keyOutputText
कि क्या आप एक लंबा यूनिकोड स्ट्रिंग इनपुट करना चाहते हैं।keyLabel
: यह वह पाठ है जो कुंजी पर प्रदर्शित होता है।keyEdgeFlags
: यह इंगित करता है कि कुंजी को किस किनारे पर संरेखित किया जाना चाहिए।isRepeatable
: यदि आप कुंजी को दबाए रखते हैं तो यह इनपुट को दोहराता रहेगा।method.xml
यह फ़ाइल उस सिस्टम को बताती है जो इनपुट विधि उप-प्रकार उपलब्ध है। मैं यहां केवल एक न्यूनतम संस्करण शामिल कर रहा हूं।
<?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
अपनी AndroidManifest.xml फ़ाइल में एक अनुभाग जोड़ना होगा । इसके 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
कैसा दिखता है और कैसा व्यवहार करता है? मैं निश्चित रूप से नहीं। ऐसा लगता है कि Android 2.0 के बाद से इसे अपडेट नहीं किया गया है। Play Store में उन सभी कस्टम कीबोर्ड के बारे में कैसे? वे ऊपर बदसूरत कीबोर्ड की तरह कुछ भी नहीं दिखते हैं।
अच्छी खबर यह है कि आप अपने स्वयं के कीबोर्ड के रूप और व्यवहार को पूरी तरह से अनुकूलित कर सकते हैं। आपको निम्नलिखित चीजें करने की आवश्यकता होगी:
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
। कीबोर्ड एक कस्टम यौगिक दृश्य होगा जिसे हम इस xml लेआउट फ़ाइल से फुलाएंगे। आप कुंजियों को व्यवस्थित करने के लिए जो भी लेआउट पसंद करते हैं उसका उपयोग कर सकते हैं, लेकिन मैं एक का उपयोग कर रहा हूं 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);
}
}
यदि आपकी गतिविधि में कई EditTexts हैं, तो आपको InputConnection
कीबोर्ड पर सही EditText को पास करने के लिए कोड लिखना होगा । (आप एक जोड़ कर ऐसा कर सकते हैं OnFocusChangeListener
और OnClickListener
EditTexts करने के लिए। देखें इस लेख की एक चर्चा के लिए।) तुम भी छुपाना चाहते हैं या उचित समय पर अपने कीबोर्ड दिखा सकते हैं।
बस। आप उदाहरण ऐप को अभी चला सकते हैं और वांछित रूप से इनपुट या टेक्स्ट हटा सकते हैं। आपका अगला कदम अपनी आवश्यकताओं को पूरा करने के लिए सब कुछ संशोधित करना है। उदाहरण के लिए, मेरे कुछ कीबोर्ड में मैंने बटन के बजाय टेक्स्टव्यू का उपयोग किया है क्योंकि उन्हें अनुकूलित करना आसान है।
TextView
बल्कि एक Button
आप कुंजी बेहतर बनाने के लिए चाहते हैं। फिर बस पृष्ठभूमि को एक आकर्षित करने योग्य बनाएं जो दबाने पर उपस्थिति स्थिति को बदल देता है।View
और कस्टम कीबोर्ड हैं जो उपवर्ग ViewGroup
। कीबोर्ड सभी चाबियों को प्रोग्रामेटिक रूप से देता है। कुंजियाँ कीबोर्ड के साथ संवाद करने के लिए एक इंटरफ़ेस का उपयोग करती हैं (इसी तरह कैसे टुकड़े किसी गतिविधि से संवाद करते हैं)। यह आवश्यक नहीं है अगर आपको केवल एक ही कीबोर्ड लेआउट की आवश्यकता है क्योंकि xml लेआउट उसके लिए ठीक काम करता है। लेकिन अगर आप क्या मैं पर काम कर रहा है का एक उदाहरण देखना चाहते हैं, सभी की जाँच Key*
और Keyboard*
कक्षाएं यहाँ । ध्यान दें कि मैं वहां एक कंटेनर दृश्य का उपयोग करता हूं जिसका कार्य कीबोर्ड में और बाहर स्वैप करना है।InputMethodManager#showInputMethodPicker()
। यदि मूल कीबोर्ड में ऐसी कुंजी नहीं है, हालांकि, एकमात्र तरीका है जो उपयोगकर्ता आपके कीबोर्ड पर स्विच कर सकते हैं, इसे सिस्टम सेटिंग्स में मैन्युअल रूप से करना है। ऐप्पल इस क्षेत्र में एंड्रॉइड से बेहतर है, क्योंकि ऐप्पल को कीबोर्ड स्विचिंग कुंजी रखने के लिए सभी कीबोर्ड की आवश्यकता होती है।
EditText
s हैं, तो आपको 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
, जो कीबोर्ड के लेआउट को xml में परिभाषित करता है। इस फाइल के बारे में अधिक जानकारी के लिए यहाँ देखें: कीबोर्ड , Keyboard.Row , Keyboard.Key ।
यहाँ एक नरम कीबोर्ड के लिए एक नमूना परियोजना है।
https://developer.android.com/guide/topics/text/creating-input-method.html
एक अलग लेआउट के साथ आपकी पंक्तियाँ समान पंक्तियों में होनी चाहिए।
संपादित करें: यदि आपको केवल अपने एप्लिकेशन में कीबोर्ड की आवश्यकता है, तो यह बहुत सरल है! ऊर्ध्वाधर अभिविन्यास के साथ एक रैखिक लेआउट बनाएं, और क्षैतिज अभिविन्यास के साथ इसके अंदर 3 रैखिक लेआउट बनाएं। फिर उन क्षैतिज रैखिक लेआउट में से प्रत्येक में प्रत्येक पंक्ति के बटन रखें, और बटन के लिए वजन संपत्ति असाइन करें। Android का उपयोग करें: उन सभी के लिए लेआउट_वेट = 1, ताकि वे समान रूप से स्थान पाएं।
इससे हल निकलेगा। यदि आपको वह नहीं मिला, जो अपेक्षित था, तो कृपया यहाँ कोड पोस्ट करें, और हम आपकी मदद करने के लिए यहाँ हैं!
सबसे अच्छा अच्छी तरह से प्रलेखित उदाहरण मुझे मिला।
http://www.fampennings.nl/maarten/android/09keyboard/index.htm
KeyboardView
संबंधित XML फ़ाइल और स्रोत कोड प्रदान किए गए हैं।
मैं हाल ही में इस पोस्ट पर आया था जब मैं यह तय करने की कोशिश कर रहा था कि मैं अपने स्वयं के कस्टम कीबोर्ड बनाने के लिए किस पद्धति का उपयोग करूं। मुझे एंड्रॉइड सिस्टम एपीआई बहुत सीमित लगता है, इसलिए मैंने अपना खुद का इन-ऐप कीबोर्ड बनाने का फैसला किया। मेरे शोध के आधार के रूप में सुरगच के उत्तर का उपयोग करते हुए , मैंने अपने स्वयं के कीबोर्ड घटक को डिजाइन किया । यह एक MIT लाइसेंस के साथ GitHub पर पोस्ट किया गया है। उम्मीद है कि यह किसी और समय और सिरदर्द को बचाएगा।
वास्तुकला बहुत लचीला है। एक मुख्य दृश्य (CustomKeyboardView) है जिसे आप अपने इच्छित कीबोर्ड लेआउट और नियंत्रक के साथ इंजेक्ट कर सकते हैं।
आपको बस आप गतिविधि xml में CustomKeyboardView घोषित करना होगा (आप इसे प्रोग्रामेटिक रूप से भी कर सकते हैं):
<com.donbrody.customkeyboard.components.keyboard.CustomKeyboardView
android:id="@+id/customKeyboardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" />
फिर इसके साथ अपने EditText को पंजीकृत करें और यह बताएं कि उन्हें किस प्रकार के कीबोर्ड का उपयोग करना चाहिए:
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)
}
CustomKeyboardView बाकी को संभालता है!
मुझे एक नंबर, नंबरडिकिमल और QWERTY कीबोर्ड के साथ गेंद लुढ़कती मिली है। इसे डाउनलोड करने और अपने स्वयं के लेआउट और नियंत्रक बनाने के लिए स्वतंत्र महसूस करें। यह इस तरह दिख रहा है:
यहां तक कि अगर यह आपके साथ जाने का फैसला करने वाला आर्किटेक्चर नहीं है, तो उम्मीद है कि यह काम करने वाले इन-ऐप कीबोर्ड के लिए सोर्स कोड देखने में मददगार होगा।
फिर से, यहां प्रोजेक्ट का लिंक दिया गया है: कस्टम इन-ऐप कीबोर्ड
खैर सुरागाच ने अब तक का सबसे अच्छा जवाब दिया लेकिन उन्होंने कुछ मामूली सामानों को छोड़ दिया जो कि ऐप को संकलित करने के लिए महत्वपूर्ण थे।
मुझे उम्मीद है कि उनके जवाब में सुधार करके सुरागा से बेहतर उत्तर दिया जा सकता है। मैं सभी लापता तत्वों को जोड़ दूंगा जो उसने नहीं डाला।
मैंने एंड्रॉइड ऐप, एपीके बिल्डर 1.1.0 का उपयोग करके अपने APK को संकलित किया। तो चलिए शुरू करते हैं।
एंड्रॉइड ऐप बनाने के लिए हमें कुछ फ़ाइलों और फ़ोल्डरों की आवश्यकता होती है जो एक निश्चित प्रारूप में व्यवस्थित होते हैं और उसी के अनुसार कैपिटल किए जाते हैं।
Res लेआउट -> xml फाइलें दिखाती हैं कि ऐप फोन पर कैसा दिखेगा। HTML आकार वेब ब्राउज़र पर कैसे दिखता है के समान। तदनुसार अपने एप्लिकेशन को स्क्रीन पर फिट करने की अनुमति दें।
मान -> निरंतर डेटा जैसे कि color.xml, strings.xml, styles.xml। इन फ़ाइलों को ठीक से वर्तनी होना चाहिए।
drawable -> pics {jpeg, png, ...}; उन्हें कुछ भी नाम दें।
mipmap -> अधिक तस्वीरें। ऐप आइकन के लिए उपयोग किया जाता है?
xml -> अधिक xml फ़ाइलें।
src -> html में जावास्क्रिप्ट की तरह कार्य करता है। लेआउट फ़ाइलें आरंभिक दृश्य आरंभ करेंगी और आपकी जावा फ़ाइल गतिशील रूप से टैग तत्वों को नियंत्रित करेगी और घटनाओं को ट्रिगर करेगी। HTML में भी लेआउट की तरह ही इवेंट्स को सीधे एक्टिवेट किया जा सकता है।
AndroidManifest.xml -> यह फ़ाइल पंजीकृत करती है कि आपका ऐप क्या है। एप्लिकेशन का नाम, प्रोग्राम का प्रकार, अनुमतियाँ, आदि। यह एंड्रॉइड को सुरक्षित बनाने के लिए लगता है। कार्यक्रम वस्तुतः वह नहीं कर सकते हैं जो उन्होंने मैनिफेस्ट में पूछा था।
अब 4 प्रकार के एंड्रॉइड प्रोग्राम हैं, एक गतिविधि, एक सेवा, एक सामग्री प्रदाता और एक प्रसारण प्राप्तकर्ता। हमारा कीबोर्ड एक सेवा होगी, जो इसे पृष्ठभूमि में चलाने की अनुमति देता है। यह लॉन्च करने के लिए ऐप्स की सूची में प्रकट नहीं होगा; लेकिन इसे अनइंस्टॉल किया जा सकता है।
अपने एप्लिकेशन को संकलित करने के लिए, ग्रेडेल और एपीके साइनिंग शामिल है। आप शोध कर सकते हैं कि एक या Android के लिए APK बिल्डर का उपयोग करें। यह सुपर आसान है।
अब जब हम एंड्रॉइड डेवलपमेंट को समझते हैं, तो हम फाइल और फोल्डर बनाते हैं।
जैसा कि मैंने ऊपर चर्चा की फाइल और फ़ोल्डर बनाएँ। मेरी निर्देशिका wil देखो इस प्रकार है:
याद रखें कि यदि आप एक विचारधारा का उपयोग कर रहे हैं जैसे कि एंड्रॉइड स्टूडियो में यह एक परियोजना फ़ाइल हो सकती है।
A: NumPad / Res / Layout / key_preview.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:background="@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>
C: NumPad / Res / xml / method.xml
<?xml version="1.0" encoding="utf-8"?>
<input-method xmlns:android="http://schemas.android.com/apk/res/android">
<subtype android:imeSubtypeMode="keyboard"/>
</input-method>
डी: Numpad / Res / xml / number_pad.xml
<?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>
बेशक यह आसानी से अपनी पसंद के अनुसार संपादित किया जा सकता है। तुम भी लेबल के लिए शब्दों के बजाय छवियों का उपयोग कर सकते हैं।
Suragch didnt मूल्यों फ़ोल्डर में फ़ाइलों को प्रदर्शित करता है और माना जाता है कि हमारे पास एंड्रॉइड स्टूडियो तक पहुंच थी; जो स्वचालित रूप से उन्हें बनाता है। अच्छी बात है कि मेरे पास एपीके बिल्डर है।
E: NumPad / Res / मान / रंग / xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#3F51B5</color>
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
</resources>
F: NumPad / res / values / strings.xml
<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>
एच: नंपाद / AndroidManifest.xml
यह वह फाइल है जो वास्तव में तनाव के लिए थी। यहां मुझे लगा कि मैं अपने कार्यक्रम को कभी संकलित नहीं करूंगा। सिसकी। सिसकी। यदि आप Suracgh के उत्तर की जांच करते हैं, तो आप देखते हैं कि वह खेतों का पहला सेट खाली छोड़ देता है, और इस फ़ाइल में गतिविधि टैग जोड़ता है। जैसा कि मैंने कहा कि चार प्रकार के Android कार्यक्रम हैं। लॉन्चर आइकन के साथ एक गतिविधि एक नियमित ऐप है। यह सुन्नपन कोई गतिविधि नहीं है! इसके अलावा उन्होंने किसी भी गतिविधि को लागू नहीं किया।
मेरे दोस्तों में गतिविधि टैग शामिल नहीं है। आपका कार्यक्रम संकलित करेगा, और जब आप लॉन्च करने का प्रयास करेंगे तो यह दुर्घटनाग्रस्त हो जाएगा! के रूप में xmlns के लिए: Android और उपयोग-एसडीके; मैं वहाँ तुम्हारी मदद नहीं कर सकता। यदि वे काम करते हैं तो बस मेरी सेटिंग्स का प्रयास करें।
जैसा कि आप देख सकते हैं कि एक सेवा टैग है, जो इसे एक सेवा के रूप में पंजीकृत करता है। इसके अलावा service.android:name हमारी जावा फ़ाइल में सार्वजनिक श्रेणी का विस्तार करने वाली सेवा का नाम होना चाहिए। यह तदनुसार पूंजीकृत किया जाना चाहिए। पैकेज भी पैकेज का नाम है जिसे हमने जावा फाइल में घोषित किया है।
<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>
I: NumPad / src / Saragch / num_pad / MyInputMethodService.java
नोट: मुझे लगता है कि जावा src का एक विकल्प है।
यह एक और समस्या फ़ाइल थी लेकिन प्रकट फ़ाइल के रूप में विवादास्पद नहीं थी। जैसा कि मुझे पता है कि क्या है, क्या नहीं है, यह जानने के लिए जावा काफी अच्छा है। मैं मुश्किल से xml जानता हूं और यह एंड्रॉइड विकास के साथ कैसे संबंध रखता है!
यहाँ समस्या वह कुछ भी आयात नहीं किया था! मेरा मतलब है, उसने हमें एक "पूर्ण" फ़ाइल दी जिसमें उन नामों का उपयोग किया गया है जिन्हें हल नहीं किया जा सकता है! InputMethodService, कीबोर्ड, आदि कि बुरा अभ्यास है श्री Suragch। मेरी मदद करने के लिए धन्यवाद, लेकिन अगर आपने नाम कैंट हल करने के लिए कोड को संकलित करने की उम्मीद कैसे की?
निम्नलिखित सही रूप से संपादित संस्करण है। मैं अभी कुछ संकेत देता हूं कि मुझे आयात करने के लिए सीखने के लिए सही जगह पर ले जाना चाहिए।
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() { }
}
संकलन करें और अपने प्रोजेक्ट पर हस्ताक्षर करें।
यह वह जगह है जहां मैं एक नए एंड्रॉइड डेवलपर के रूप में क्लूलेस हूं। मैं इसे मैन्युअल रूप से सीखना चाहूंगा, क्योंकि मेरा मानना है कि वास्तविक प्रोग्रामर मैन्युअल रूप से संकलन कर सकते हैं।
मुझे लगता है कि उपशीर्षक संकलन और पैकेजिंग के लिए एपीके में से एक है। apk ज़िप फ़ाइल के लिए जार फ़ाइल या रार जैसा प्रतीत होता है। फिर दो प्रकार के हस्ताक्षर होते हैं। डिबग कुंजी जिसे प्ले स्टोर और निजी कुंजी पर आवंटित नहीं किया गया है।
खैर श्री सरगच को हाथ दें। और मेरा वीडियो देखने के लिए धन्यवाद। लाइक करें, सब्सक्राइब करें
एक ही समस्या थी। मैंने पहली बार टेबल लेआउट का उपयोग किया था लेकिन एक बटन प्रेस के बाद लेआउट बदलता रहा। हालांकि यह पृष्ठ बहुत उपयोगी पाया गया। http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-creating-a-numeric-keypad-with-gridlayout/