Hallo,
ich suche nach einer Möglichkeit das Softkeyboard-Beispiel
des SDK so zu erweitern, dass ich den einzelnen Tasten eigene
Hintergründe geben kann.
Pro Taste sollen es 2 Hintergründe sein,
normal und gedrückt. Mit android:keyBackground kann man den Hintergrund
ja nur global einstellen.
Mein bisheriger Ansatz:
1. attrs.xml für die Definition eigener Attribute
2. Überschreiben verschiedener Methoden in public class LatinKeyboardView extends KeyboardView (LatinKeyboardView.java):
public void setKeyboard(LatinKeyboard keyboard)
{ super.setKeyboard(keyboard);
List<LatinKey> keys = keyboard.LatinGetKeys();
mKeys = keys.toArray(new LatinKey[keys.size()]);
}
@Override
public void setOnKeyboardActionListener(OnKeyboardActionListener listener)
{ super.setOnKeyboardActionListener(listener);
}
@Override public void closing() { super.closing(); }
@Override public boolean handleBack() {return super.handleBack(); }
@Override public boolean setShifted(boolean shifted) { return super.setShifted(shifted); }
@Override public Keyboard getKeyboard() { return super.getKeyboard(); }
@Override public boolean isShifted() { return super.isShifted(); }
@Override public void onDraw(Canvas c) in public class LatinKeyboardView extends KeyboardView
@Override
public void onDraw(Canvas c)
{ onBufferDraw();
if (this.mBuffer!=null) c.drawBitmap(this.mBuffer, 0,0,null);
super.onDraw(c); // Background: transparent
}
Alles anzeigen
3. static class LatinKey extends Keyboard.Key in public class LatinKeyboard extends Keyboard (LatinKeyboard.java)
habe ich angepasst, um an die Attribute der einzelnen Tasten komme.
damit die Keys in einem Array gespeichert werden habe ich folgene Methode abgeändert:
private List<LatinKey> mKeys;
@Override
protected Key createKeyFromXml(Resources res, Row parent, int x, int y, XmlResourceParser parser)
{ LatinKey key = new LatinKey(res, parent, x, y, parser);
if (key.codes[0] == 10)
{ mEnterKey = key;
}
if (mKeys==null) mKeys = new ArrayList<LatinKey>();
this.mKeys.add(key);
return key.key;
}
Alles anzeigen
4. in onDraw (LatinKeyboardView.java) rufe ich
Mit diesen Anpassungen ist es mir auch gelungen eigene Hintergründe pro Taste zuzuweisen, jedoch sind ein paar Dinge ungelöst.
1. wie kann ich die Hintergrundgrafiken als drawable einbinden (Java-Code),
z.B.
<Key android:codes="101" android:keyLabel="e" mykeyb:bgf0="@drawable/amber" mykeyb:bgf1="@drawable/red"
als externe Grafik von der sdcard klappts so:
<Key android:codes="101" android:keyLabel="e" mykeyb:bgf0="but/amber.png" mykeyb:bgf1="but/red.png"
2.
wie bekomme ich es hin, dass wenn ein key gedrückt wird, dieser auch
als 2. Hintergrund dargestellt wird (onDraw wird offensichtlich nicht aufgerufen)
3. gibt es eine Möglichkeit diese Grafik-Definitionen in
der <Row ... -Zeile als Default-Angabe für die folgenden <Key ... -Zeilen zu definieren ?
eventuel mittels "static class LatinRow extends Keyboard.Row" in LatinKeyboard.java
irgendwie mittels
// @Override
// protected Row createRowFromXml(Resources res, XmlResourceParser parser)
// { LatinRow row = new LatinRow(res, this, parser);
// return row.row;
// }
Vielleicht hat jemand ein paar Ideen ?
Gruss Dieter