2013-07-18 9 views
12

में किसी भी कुंजी की मुख्य पृष्ठभूमि को बदलने के लिए कैसे मैं कीबोर्ड में अपनी कुछ चाबियाँ दूसरों से अलग करना चाहता हूं।एंड्रॉइड सॉफ्ट कीबोर्ड

उदाहरण के लिए, बदलाव की तरह, तस्वीर के नीचे में हटाने के लिए, अंतरिक्ष कुंजी:

enter image description here

गूगल से संदर्भ दस्तावेजों के अनुसार। हम "input.xml" में "android:[email protected]/xxx" का उपयोग करके कुंजी की पृष्ठभूमि बदल सकते हैं, लेकिन यह कीबोर्ड में सभी कुंजी की पृष्ठभूमि बदलता है।

हालांकि qwerty.xml में "एंड्रॉइड: कीिकॉन" में एक कुंजी बदल सकती है, लेकिन यह केवल लेबल को प्रतिस्थापित करती है। इस बीच, "android:keyicon" का उपयोग करें, छवि पूरी कुंजी को कवर नहीं कर सकती है, छवि मुख्य पृष्ठभूमि की तुलना में थोड़ा छोटा होगा।

कुछ चाबियों की पृष्ठभूमि बदलने का सही तरीका क्या है?

+0

आप लिंक का अनुसरण उल्लेख कर सकते हैं 1. [कड़ी 1] [1] 2. [लिंक 2] [2] [1]: http: //stackoverflow.com/questions/15789997/how-to-change-background-color-of-key-for-android-soft-keyboard [2]: http://stackoverflow.com/questions/18180136/how करने वाली परिवर्तन पृष्ठभूमि रंग या विषय-ऑफ-द-कुंजी डायनामिक रूप से मैं n-custom-keyboard-a – ashishmohite

उत्तर

13

यह स्पष्ट नहीं है कि आप एक कस्टम कीबोर्ड कैसे बनाएं या नहीं। यदि आप नहीं करते हैं, here's एक छोटी डाउनलोड करने योग्य प्रोजेक्ट जो कस्टम संख्यात्मक कीबोर्ड बनाता है। कस्टमकिबोर्डबोर्ड कक्षा में या अपनी खुद की कस्टम कीबोर्ड कक्षा में, निम्न विधि जोड़ें। यह ऑन ड्रा() विधि को ओवरराइड करता है और कोड 7 के साथ परिभाषित कुंजी की पृष्ठभूमि खींचता है (इस मामले में "0") लाल और अन्य सभी चाबियां नीली होती हैं।

@Override 
public void onDraw(Canvas canvas) { 
    super.onDraw(canvas); 

    List<Key> keys = getKeyboard().getKeys(); 
    for (Key key : keys) {    
     if (key.codes[0] == 7) { 
      Log.e("KEY", "Drawing key with code " + key.codes[0]); 
      Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.red_tint); 
      dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      dr.draw(canvas); 

     } else { 
      Drawable dr = (Drawable) context.getResources().getDrawable(R.drawable.blue_tint); 
      dr.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      dr.draw(canvas); 
     }    
    } 
} 

tinted keys

इस मामले में, मैं 9-पैच छवियों, लेकिन सिर्फ कुछ सरल 50% पारदर्शी वर्ग छवियों का उपयोग नहीं किया था और एक प्रभाव जहां मौजूदा बटन केवल रंग से रंगा हुआ कर रहे हैं हासिल की मैं चाहता था। अधिक कस्टम परिणाम प्राप्त करने के लिए, मैं अपने ड्रॉबल्स 9-पैच छवियां बना सकता हूं और निम्न कार्य कर सकता हूं। ध्यान दें कि आइकन के साथ दो कुंजियां सही ढंग से प्रस्तुत नहीं होती हैं क्योंकि उन्हें 9-पैच छवियों के रूप में परिभाषित नहीं किया गया है और मैंने इस उदाहरण के लिए उन्हें अच्छी तरह से स्केल करने के लिए कोई विशेष प्रयास नहीं किया है। मैंने चाबियों के लिए विभिन्न राज्यों के लिए विभिन्न छवियों/प्रभावों के उपयोग को भी संबोधित नहीं किया; दूसरों ने दिखाया है कि यह कैसे करें।

@Override 
public void onDraw(Canvas canvas) { 
    // super.onDraw(canvas); 

    List<Key> keys = getKeyboard().getKeys(); 
    for (Key key : keys) { 
     if (key.codes[0] == 7) { 
      NinePatchDrawable npd 
       = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.red_key); 
      npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      npd.draw(canvas); 

     } else { 
      NinePatchDrawable npd 
       = (NinePatchDrawable) context.getResources().getDrawable(R.drawable.blue_key); 
      npd.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      npd.draw(canvas); 
     } 

     Paint paint = new Paint(); 
     paint.setTextAlign(Paint.Align.CENTER); 
     paint.setTextSize(48); 
     paint.setColor(Color.GRAY); 

     if (key.label != null) { 
      canvas.drawText(key.label.toString(), key.x + (key.width/2), 
          key.y + (key.height/2), paint); 
     } else { 
      key.icon.setBounds(key.x, key.y, key.x + key.width, key.y + key.height); 
      key.icon.draw(canvas); 
     } 
    } 
}  

replaced keys

+0

धन्यवाद! आपका उदाहरण पैकेट का नाम बदलने पर मुझे एक बग खोजने में मदद करता है। मुझे जेनरेट जावा को हटाने और इसे पुन: उत्पन्न करने की आवश्यकता है। –

0

मैं coments पोस्ट नहीं कर सकते, इसलिए जहां एक समाधान है कि मैं अपनी अच्छी लगता है, कोड द्वारा यह कर मैं एक ऐसी ही सवाल मैंने पाया का लिंक रख:

Customize the appearance of a <Key>

+0

आप ऐसे समाधान पर इंगित कर रहे हैं जो कुंजी पर टेक्स्ट खींचता है। ओपी कुंजी पृष्ठभूमि बदलने के बारे में था। –

6

पहली बात करने के लिए नोट यह है कि एक्सएमएल में ऐसा करने का कोई आसान तरीका नहीं है, आपको जावा में इसे करने की आवश्यकता होगी।

आप कोड का निम्न भाग का उपयोग कर कुंजी की सूची प्राप्त कर सकते हैं: के लिए एक का उपयोग कर,

Keyboard keyboard = keyboardView.getKeyboard(); 
List<Key> keys = keyboard.getKeys(); 

एक बार जब आप कुंजी की सूची है, तो आप उन के माध्यम से पुनरावृति कर सकते हैं जिन्हें आप बदलना चाहते हैं खोजने के लिए पाश की तरह:

for (Key key : keys) { 
    ... 
} 

Please refer to the documentation here for the properties of Keyboard.Key in Android. आप शायद the codes उपयोग करने के लिए कुंजी भेद करने के लिए चाहता हूँ।

आप देखेंगे कि कुंजी के पृष्ठभूमि रंग को बदलने का कोई सीधा तरीका नहीं है। हालांकि, आइकन बदलने का एक तरीका है, इसलिए आप उसी व्यवहार को अनुकरण करने के लिए इसका उपयोग कर सकते हैं। आप आकर्षित करने योग्य ऑब्जेक्ट्स उत्पन्न कर सकते हैं जिसमें आपके इच्छित रंग होते हैं और इसे आइकन के रूप में सेट करते हैं। आप NinePatchDrawable का उपयोग कर सकते हैं।

आप इस कार्यक्षमता को onStartInputView() विधि या onDraw() विधि में जोड़ सकते हैं। आप कोड का एक टुकड़ा देख सकते हैं जो माना जाता है कि here काम कर रहा है।

वैकल्पिक रूप से, आप अपना खुद का कीबोर्ड लागू करने का निर्णय ले सकते हैं। यदि आप ऐसा करना चाहते हैं, तो आप एंड्रॉइड कार्यान्वयन here देख सकते हैं। आप इसकी प्रतिलिपि बना सकते हैं और इसे अपनी आवश्यकताओं के अनुरूप सीधे संशोधित कर सकते हैं।

संबंधित मुद्दे