2013-04-23 17 views
9

Ho creato una tastiera personalizzata utilizzando la classe Tastiera Android.Impostazione della modalità tastiera nella tastiera personalizzata Android

Desidero disporre di righe per due modalità. Uno è la modalità normale. E uno è quando l'utente preme il pulsante "Sym". Per ogni Keyboard.Row per il pulsante "Sym" nell'XML ho specificato Android: keyboardMode = "@ + id/sym".

Ora quando eseguo solo le righe che non specificano l'androide: display KeyboardMode. Questo è come previsto e ciò che dice la documentazione.

Le mie domande sono come impostare la Modalità nel mio codice in modo che le righe con Android: keyboardMode = "@ + id/sym" vengano visualizzate?

<Row> 
    <Key android:codes="113" android:keyLabel="q" /> 
    <Key android:codes="119" android:keyLabel="w" /> 
    <Key android:codes="101" android:keyLabel="e" /> 
    <Key android:codes="114" android:keyLabel="r" /> 
    <Key android:codes="116" android:keyLabel="t" /> 
    <Key android:codes="121" android:keyLabel="y" /> 
    <Key android:codes="117" android:keyLabel="u" /> 
    <Key android:codes="105" android:keyLabel="i" /> 
    <Key android:codes="111" android:keyLabel="o" /> 
    <Key android:codes="112" android:keyLabel="p" /> 
    <Key android:codes="-5" android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" /> 
</Row> 
<Row android:keyboardMode="@+id/sym"> 
    <Key android:codes="113" android:keyLabel="+" /> 
    <Key android:codes="119" android:keyLabel="_" /> 
    <Key android:codes="101" android:keyLabel="=" /> 
    <Key android:codes="114" android:keyLabel="%" /> 
    <Key android:codes="116" android:keyLabel="^" /> 
    <Key android:codes="121" android:keyLabel="|" /> 
    <Key android:codes="117" android:keyLabel="&lt;" /> 
    <Key android:codes="105" android:keyLabel=">" /> 
    <Key android:codes="111" android:keyLabel="[" /> 
    <Key android:codes="112" android:keyLabel="]" /> 
    <Key android:codes="-5" android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" /> 
</Row> 

risposta

15

Ok l'ho capito da solo.

Non c'è alcun metodo per cambiare semplicemente le modalità della tastiera. Quello che devi fare è creare 2 tastiere diverse e passare da una all'altra manualmente.

Ecco come si presenta l'XML aggiornato. NOTA che le righe che vuoi in entrambe le parole chiave non dovrebbero includere il flag android: keyboardMode.

<!-- this is the row that shows in both modes --> 
<Row android:keyWidth="51dp"> 
    <Key android:codes="49" android:keyLabel="1" /> 
    <Key android:codes="50" android:keyLabel="2" /> 
    <Key android:codes="51" android:keyLabel="3" /> 
    <Key android:codes="52" android:keyLabel="4" /> 
    <Key android:codes="53" android:keyLabel="5" /> 
    <Key android:codes="54" android:keyLabel="6" /> 
    <Key android:codes="55" android:keyLabel="7" /> 
    <Key android:codes="56" android:keyLabel="8" /> 
    <Key android:codes="57" android:keyLabel="9" /> 
    <Key android:codes="48" android:keyLabel="0"/>   
</Row> 

<!-- this is the normal mode --> 
<Row android:keyboardMode="@integer/keyboard_normal"> 
    <Key android:codes="113" android:keyLabel="q" /> 
    <Key android:codes="119" android:keyLabel="w" /> 
    <Key android:codes="101" android:keyLabel="e" /> 
    <Key android:codes="114" android:keyLabel="r" /> 
    <Key android:codes="116" android:keyLabel="t" /> 
    <Key android:codes="121" android:keyLabel="y" /> 
    <Key android:codes="117" android:keyLabel="u" /> 
    <Key android:codes="105" android:keyLabel="i" /> 
    <Key android:codes="111" android:keyLabel="o" /> 
    <Key android:codes="112" android:keyLabel="p" /> 
    <Key android:codes="-5" android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" /> 
</Row> 

<!-- this is the symbol mode--> 
<Row android:keyboardMode="@integer/keyboard_symbol"> 
    <Key android:codes="113" android:keyLabel="+" /> 
    <Key android:codes="119" android:keyLabel="_" /> 
    <Key android:codes="101" android:keyLabel="=" /> 
    <Key android:codes="114" android:keyLabel="%" /> 
    <Key android:codes="116" android:keyLabel="^" /> 
    <Key android:codes="121" android:keyLabel="|" /> 
    <Key android:codes="117" android:keyLabel="&lt;" /> 
    <Key android:codes="105" android:keyLabel=">" /> 
    <Key android:codes="111" android:keyLabel="[" /> 
    <Key android:codes="112" android:keyLabel="]" /> 
    <Key android:codes="-5" android:keyIcon="@drawable/keyboard_backspace_icon" android:keyWidth="91dp" /> 
</Row> 

quindi creare un integer.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer name="keyboard_symbol">1</integer> 
    <integer name="keyboard_normal">0</integer> 
</resources> 

Ecco il codice Java in questione. Quando si crea l'oggetto Keyboard si passa il keyboard_normal o keyboard_symbol.

normalKeyBoard = new Keyboard(activity, R.id.board, R.integer.keyboard_normal); 
symbolKeyBoard = new Keyboard(activity, R.id.board, R.integer.keyboard_symbol); 

Ora creare una variabile di classe per tenere traccia della modalità. Il valore di default è R.integer.keyboard_normal

private int mKeyboardState = R.integer.keyboard_normal; 

Ora nel tuo onKeyboardActionListner(). Metodo OnKey mettere il codice per acquisire la chiave che cambia le modalità (supponendo che avete creato uno nella vostra tastiera).

+0

C'è un codice chiave per attivare KEYCODE_MODE_CHANGE? Non sono in grado di trovarlo. –

Problemi correlati