Softkeyboard eigene Tasten

  • Antworten:2
Dieter
  • Forum-Beiträge: 4

09.04.2012, 10:32:40 via Website

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):

1public void setKeyboard(LatinKeyboard keyboard)
2{ super.setKeyboard(keyboard);
3 List<LatinKey> keys = keyboard.LatinGetKeys();
4 mKeys = keys.toArray(new LatinKey[keys.size()]);
5}
6
7@Override
8public void setOnKeyboardActionListener(OnKeyboardActionListener listener)
9{ super.setOnKeyboardActionListener(listener);
10}
11
12@Override public void closing() { super.closing(); }
13@Override public boolean handleBack() {return super.handleBack(); }
14@Override public boolean setShifted(boolean shifted) { return super.setShifted(shifted); }
15@Override public Keyboard getKeyboard() { return super.getKeyboard(); }
16@Override public boolean isShifted() { return super.isShifted(); }
17@Override public void onDraw(Canvas c) in public class LatinKeyboardView extends KeyboardView
18
19@Override
20public void onDraw(Canvas c)
21{ onBufferDraw();
22 if (this.mBuffer!=null) c.drawBitmap(this.mBuffer, 0,0,null);
23 super.onDraw(c); // Background: transparent
24}


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:

1private List<LatinKey> mKeys;
2
3@Override
4protected Key createKeyFromXml(Resources res, Row parent, int x, int y, XmlResourceParser parser)
5{ LatinKey key = new LatinKey(res, parent, x, y, parser);
6 if (key.codes[0] == 10)
7 { mEnterKey = key;
8 }
9 if (mKeys==null) mKeys = new ArrayList<LatinKey>();
10 this.mKeys.add(key);
11 return key.key;
12}


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),
1z.B. <Key android:codes="101" android:keyLabel="e" mykeyb:bgf0="@drawable/amber" mykeyb:bgf1="@drawable/red"

als externe Grafik von der sdcard klappts so:
1<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
1// @Override
2// protected Row createRowFromXml(Resources res, XmlResourceParser parser)
3// { LatinRow row = new LatinRow(res, this, parser);
4// return row.row;
5// }


Vielleicht hat jemand ein paar Ideen ?

Gruss Dieter

Antworten
Dieter
  • Forum-Beiträge: 4

11.04.2012, 08:10:45 via Website

Guten Morgen

Hat jemand einen Ansatz ?

Gruss Dieter

Antworten
Dieter
  • Forum-Beiträge: 4

18.04.2012, 15:40:46 via Website

Hallo,

mittlerweile hab ich es hinbekommen, ich habe Keyboard.java und Keyboardview.java mit in das Projekt genommen und entsprechend angepasst.
Mittels attrs.xml habe ich meine notwendigen Attribute definiert.

Jetzt möchte ich aber ein Options-Menü einbauen, damit ich z.B. die Sprache einstellen kann.
Leider hänge ich hier bereits wieder.
Ich sehe ein Taste des Keyboards für die Optionen vor, bei der ein Auswahlmenü erscheinen soll.
Ich habe an ein Contextmenü gedacht, bekomme es aber nicht hin.
Geht es überhaupt in einem Service ?

Gruss
Dieter

Antworten