2011-06-23 15 views
6

मैं एंड्रॉइड के लिए आईएमई बनाने की कोशिश कर रहा हूं जो पारंपरिक कीबोर्ड नहीं है (विभिन्न अक्षरों से संबंधित कुंजी की पंक्तियां) और मुझे ऐसा करने के तरीके पर सहायक संसाधन खोजने में परेशानी हो रही है क्योंकि सभी एसडीके में कोड उदाहरण एक कीबोर्ड एपीआई का उपयोग करते हैं और यह कार्यों में बनाया गया है।एंड्रॉइड: गैर-कीबोर्ड आईएमई

मैंने एक XML फ़ाइल में आईएमई के इंटरफ़ेस को डिज़ाइन किया है, हालांकि यह केवल एप्लिकेशन में एक गतिविधि थी, लेकिन मैं अपने डेमो में खो रहा हूं क्योंकि उनके कीबोर्ड केवल ऑब्जेक्ट्स हैं जो एक अलग शैली से बने होते हैं एक्सएमएल संरचना।

अगर किसी के पास ओपन सोर्स प्रोजेक्ट का कोई लिंक नहीं है जो परंपरागत कीबोर्ड संरचना का उपयोग नहीं करता है या मुझे केवल यूआई प्रदर्शित करने के लिए मार्गदर्शन कर सकता है जिसे मैंने पहले से ही आईएमई विंडो पर बनाया है, तो मुझे लगता है कि मैं बाकी को समझ सकता हूं ।

यदि आपको किसी भी अधिक जानकारी की आवश्यकता है, तो कृपया बेझिझक पूछें। अग्रिम धन्यवाद।

+0

कृपया मेरी मदद कैसे स्थापित करने के लिए अपना खुद का कीबोर्ड? मैंने अलग-अलग एप्लिकेशन का उपयोग किया है। मैं टेक्स्टबॉक्स (बाएं या दाएं) के पास छोटा कीबोर्ड दिखाना चाहता हूं। यह मेरा प्रश्न है। http://stackoverflow.com/questions/7357876/set-keyboard- समन्वय-how-to-set-the-keyboard-xy-co-ordination मैंने एंड्रॉइड एपीआई डेमो का उपयोग करके अपना खुद का कीबोर्ड किया है ... – Piraba

उत्तर

6

SoftKeyboard नमूना वास्तव में आपके लिए आवश्यक चीज़ों के समान संरचित है, हालांकि आप इसे नहीं जानते हैं। इसे तोड़ने के नीचे हैं - यहाँ एक पूरा ठूंठ को किसी इनपुट विधि सेवा के रूप में कार्य और मानक एक्सएमएल कीबोर्ड का उपयोग करने के तरीके:

import android.inputmethodservice.InputMethodService; 
import android.inputmethodservice.Keyboard; 

public class MyInputMethod extends InputMethodService { 
    private Keyboard mKeyboard; 

    @Override public void onInitializeInterface() { 
     mKeyboard = new Keyboard(this, R.xml.qwerty); 
    } 

    @Override public View onCreateInputView() { 
     mInputView = (KeyboardView) getLayoutInflater().inflate(
       R.layout.input, null); 
     mInputView.setKeyboard(mKeyboard); 
     return mInputView; 
    } 
} 

ध्यान दें कि दो एक्सएमएल दस्तावेजों नाम हैं। पहला, res/xml/qwerty.xml, लेआउट को परिभाषित करता है ताकि KeyboardView क्लास कीबोर्ड को आकर्षित करने के बारे में जानता है। (सरलीकृत)

लेकिन लेआउट जो इसे अनावश्यक रूप से बढ़ा, res/layout/input.xml, इस के होते हैं:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"> 
    <android.inputmethodservice.KeyboardView android:id="@+id/keyboard" /> 
</LinearLayout> 

यह सब आप एलान के तौर पर एक दृश्य बनाने की जरूरत है! एक स्टैंड-अलोन बनाना ViewActivity बनाने से बहुत अलग नहीं है। आपके पास मानक गतिविधि जीवन चक्र नहीं है, लेकिन दोनों वातावरण आपको एक्सएमएल लेआउट तक पहुंच प्रदान करते हैं। आपको केवल इतना करना है कि inflater का उपयोग करें, आपको आवश्यक किसी भी सबव्यूव का संदर्भ दें, और फिर मुख्य दृश्य वापस करें।

तो उम्मीद है कि आप इसके बारे में सोचने के बाद अपना लेआउट फुला सकेंगे।


यदि आपका लेआउट पर्याप्त सरल है तो आपको XML लेआउट का उपयोग करने की भी आवश्यकता नहीं है। यदि आपकी इनपुट विधि में एक ही दृश्य के पूरी तरह से शामिल हो सकते हैं, तो आप इसे सीधे onCreateInputView में तुरंत चालू कर सकते हैं। यहां एक संपूर्ण ठूंठ इनपुट विधि सेवा है कि किसी भी एक्सएमएल का उपयोग नहीं करता है: (। बेशक प्रकट में बॉयलरप्लेट और res/xml/method.xml फ़ाइलों को अभी भी नहीं होगा)

public class MyInputMethod extends InputMethodService { 
    MyView view; 

    @Override 
    public View onCreateInputView() { 
     return view = new MyView(this); 
    } 

} 

+0

बहुत बहुत धन्यवाद , मैं अपने सभी कीबोर्ड कक्षाओं और विधियों में इतनी पकड़ गई कि मैंने ऐसी सरल निगरानी को अनदेखा किया। – cmcowart

+0

कृपया मुझे इस प्रश्न में मदद करें। अगर आपने सफलतापूर्वक ऐसा किया है ... कृपया मेरी मदद करें http://stackoverflow.com/questions/7357876/set-keyboard-coordination-how-to-set-the-keyboard-xy-co -ऑर्डिनेशन – Piraba

+0

मुझे लगता है कि यह धागा मर चुका है, लेकिन मैनिफेस्ट में वास्तव में क्या आवश्यक है? – Zwade