2013-07-18 3 views
12

Ich möchte einige meiner Tasten in der Tastatur anders als andere haben.wie Schlüssel Hintergrund einer beliebigen Taste in Android Soft-Tastatur ändern

Zum Beispiel so verschieben, löschen, Leertaste in unten Foto:

enter image description here

Nach den Referenzdokumenten von Google. Wir können den Hintergrund der Taste ändern, indem Sie "android:[email protected]/xxx" in "input.xml" verwenden, aber den Hintergrund aller Tasten der Tastatur ändern.

Obwohl "android: keyicon" in qwerty.xml kann einzelne Schlüssel geändert haben, aber es ersetzt nur die Bezeichnung. In der Zwischenzeit verwenden Sie "android:keyicon", das Bild kann nicht den gesamten Schlüssel abdecken, das Bild wird ein bisschen kleiner als der Schlüssel Hintergrund sein.

Was ist der richtige Weg, um den Hintergrund einiger Tasten zu ändern?

+0

Sie folgenden Links verweisen 1. [link 1] [1] 2. [link 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 -zu-ändern-Hintergrund-Farbe-oder-Thema-von-Tasten-dynamisch-i n-custom-keyboard-a – ashishmohite

Antwort

13

Es ist nicht klar, ob Sie verstehen, wie Sie eine benutzerdefinierte Tastatur erstellen oder nicht. Falls nicht, here's ein kleines herunterladbares Projekt, das eine benutzerdefinierte numerische Tastatur erstellt. Fügen Sie der CustomKeyboardView-Klasse dort oder zu Ihrer eigenen benutzerdefinierten Tastaturklasse die folgende Methode hinzu. Sie überschreibt die onDraw() -Methode und zeichnet den Hintergrund des Schlüssels, der mit Code 7 (in diesem Fall die "0") definiert ist, rot und alle anderen Schlüssel blau.

@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

In diesem Fall habe ich 9-Patch-Bilder nicht, sondern nur ein paar einfachen 50% transparent quadratische Bilder und erzielen einen Effekt, bei dem die vorhandenen Tasten sind nur mit den Farben getönt I gewollt. Um ein benutzerdefinierteres Ergebnis zu erhalten, könnte ich 9-Patch-Bilder erstellen und folgende Aufgaben ausführen. Beachten Sie, dass die beiden Schlüssel mit Symbolen nicht korrekt dargestellt werden, da sie nicht als 9-Patch-Bilder definiert sind und ich keine besonderen Anstrengungen unternommen habe, um sie für dieses Beispiel gut skalieren zu lassen. Ich habe auch nicht die Verwendung verschiedener Bilder/Effekte für die verschiedenen Zustände für die Tasten angesprochen; andere haben gezeigt, wie man das macht.

@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

Danke! Ihr Beispiel hilft mir, einen Fehler beim Umbenennen des Pakets zu finden. Ich muss das generierte Java löschen und neu generieren. –

0

Ich kann nicht coments veröffentlichen, so habe ich einen Link auf eine ähnliche Frage fand ich in der eine Lösung gibt, die ich seine guten denken, es von Code tun:

Customize the appearance of a <Key>

+0

Sie zeigen auf eine Lösung, die Text auf einem Schlüssel zeichnet. Im OP ging es darum, den Schlüsselhintergrund zu ändern. –

6

Das erste, was zu Beachten Sie, dass es keine einfache Möglichkeit gibt, dies in XML zu tun. Sie müssen dies in Java tun.

Sie können die Liste der Schlüssel erhalten das folgende Stück Code:

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

Sobald Sie die Liste der Schlüssel haben, können Sie durch sie durchlaufen können die, die Sie ändern möchten, finden, die eine Verwendung für Schleife wie:

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

Please refer to the documentation here for the properties of Keyboard.Key in Android. Sie werden wahrscheinlich wollen the codes verwenden, um die Tasten zu unterscheiden.

Sie werden feststellen, dass es keine direkte Möglichkeit gibt, die Hintergrundfarbe eines Schlüssels zu ändern. Es gibt jedoch eine Möglichkeit, das Symbol zu ändern, damit Sie dasselbe Verhalten simulieren können. Sie könnten Zeichenobjekte erstellen, die die von Ihnen benötigte Farbe enthalten, und sie als Symbol festlegen. Sie könnten eine NinePatchDrawable verwenden.

Sie können diese Funktionalität entweder in der onStartInputView()-Methode oder in der onDraw()-Methode hinzufügen. Sie können ein Stück Code sehen, der angeblich funktioniert here.

Alternativ können Sie auch Ihre eigene Tastatur implementieren. Falls Sie das möchten, können Sie die Android-Implementierung here sehen. Sie können dies kopieren und direkt an Ihre Bedürfnisse anpassen.

Verwandte Themen