Dieter
- Forum-Beiträge: 4
09.04.2012, 10:32:40 via Website
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):
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:
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),
als externe Grafik von der sdcard klappts so:
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
Vielleicht hat jemand ein paar Ideen ?
Gruss Dieter
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}
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}
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// }
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
Empfohlener redaktioneller Inhalt
Mit Deiner Zustimmung wird hier ein externer Inhalt geladen.
Mit Klick auf den oben stehenden Button erklärst Du Dich damit einverstanden, dass Dir externe Inhalte angezeigt werden dürfen. Dabei können personenbezogene Daten an Drittanbieter übermittelt werden. Mehr Infos dazu findest Du in unserer Datenschutzerklärung.