2016-07-12 27 views
8

Sto utilizzando TabLayout per visualizzare diversi metodi di input. La prima scheda contiene pulsanti e la quarta scheda dovrebbe visualizzare la tastiera standard incorporata in questo TabLayout. Ecco uno screenshot come dovrebbe essere simile:Mostra tastiera virtuale in Android TabLayout

enter image description here

Il TabLayout funziona finora. Ho provato a creare un file XML di layout con KeyboardView. Ma l'applicazione non mostra una tastiera:

<?xml version="1.0" encoding="utf-8"?> 
<android.inputmethodservice.KeyboardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/keyboard" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    /> 

Se sto utilizzando un semplice TextView, l'applicazione visualizza il testo in modo che il ... TabLayout si sta lavorando:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="This is a tab layout" 
     android:id="@+id/textView" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" /> 
</RelativeLayout> 

La mia domanda è come posso creare una tastiera semplice e visualizzarla all'interno di TabLayout? Grazie!

+0

Non sono sicuro, ma lo provare a specificare una certa altezza al tuo KeyboardView? Ti piace circa 250dp o qualcosa del genere? –

risposta

1

Nel mio frammento avevo bisogno di alcune righe di codice, ad esempio, ho dovuto aggiungere un XML Layout:

public class SQLConsoleTab2Fragment extends SQLConsoleFragment implements KeyboardView.OnKeyboardActionListener { 

    public KeyboardView keyboard123; 
    public View Tab2View; 

@Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
//execute(v) 


     Tab2View = inflater.inflate(R.layout.tab2, container, false); 
     keyboard123 = (KeyboardView) Tab2View.findViewById(R.id.keyboard123); 

     Keyboard k1 = new Keyboard(Tab2View.getContext(), R.xml.qwerty_keyboard); 


Tab2View.findViewById(R.id.keyboard123); 
     keyboard123.setKeyboard(k1); 
     keyboard123.setEnabled(true); 
     keyboard123.setPreviewEnabled(true); 

     keyboard123.setOnKeyboardActionListener(this); 

     return Tab2View; 
    } 
} 
1

Ho scritto un IME circa due anni fa. Il tuo caso è diverso dal mio ma l'idea dovrebbe essere la stessa.

Il problema è che non è stato specificato un layout tastiera per la visualizzazione tastiera.

vedere il codice:

@Override 
    public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 
     // Round up a little 
     if (mKeyboard == null) { 
      setMeasuredDimension(mPaddingLeft + mPaddingRight, mPaddingTop + mPaddingBottom); 
     } else { 
      int width = mKeyboard.getMinWidth() + mPaddingLeft + mPaddingRight; 
      if (MeasureSpec.getSize(widthMeasureSpec) < width + 10) { 
       width = MeasureSpec.getSize(widthMeasureSpec); 
      } 
      setMeasuredDimension(width, mKeyboard.getHeight() + mPaddingTop + mPaddingBottom); 
     } 
    } 

Il mKeyboard gatto variabile essere impostata tramite setKeyboard. Che cosa si dovrebbe fare è:

  1. Creare un file di layout di tastiera nella cartella delle risorse
  2. creare un'istanza Keyboard e impostarlo al KeyboardView
  3. Provare a eseguire il codice.
1

Non ho scritto su qualsiasi altra informazione, quindi penso che ha senso scrivere passi pieni per lavorare con la tastiera, in base a doc, o, This Example:

1 Modificare manifesto con l'aggiunta di proprietà (per l'attività o servizio)

<service android:name=".SimpleIME" 
    android:label="@string/simple_ime" 
    android:permission="android.permission.BIND_INPUT_METHOD" 
    > 
    <meta-data android:name="android.view.im" android:resource="@xml/method"/> 
    <intent-filter> 
     <action android:name="android.view.InputMethod" /> 
    </intent-filter>    
</service> 

2) Creare file principale con le proprietà della tastiera:

<?xml version="1.0" encoding="utf-8"?> 
<input-method xmlns:android="http://schemas.android.com/apk/res/android"> 
    <subtype 
     android:label="@string/subtype_en_US"  
     android:imeSubtypeLocale="en_US" 
     android:imeSubtypeMode="keyboard" /> 
</input-method> 

3) Definire KeyboardView nel layout (come avete fatto)

<?xml version="1.0" encoding="UTF-8"?> 
<android.inputmethodservice.KeyboardView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/keyboard" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:keyPreviewLayout ="@layout/preview" 
/> 

4) Definire i tasti della tastiera (solo un esempio):

<Keyboard xmlns:android="http://schemas.android.com/apk/res/android" 
    android:keyWidth="10%p" 
    android:horizontalGap="0px" 
    android:verticalGap="0px" 
    android:keyHeight="60dp" > 
    <Row> 
     <Key android:codes="49" android:keyLabel="1" android:keyEdgeFlags="left"/> 
     <Key android:codes="50" android:keyLabel="2"/> 
     <Key android:codes="51" android:keyLabel="3"/> 
     <Key android:codes="52" android:keyLabel="4"/> 

     // .......... 
</Keyboard> 

5) Definire un servizio o di estendere questa interfacce in acitivity:

public class SimpleIME extends InputMethodService 
    implements OnKeyboardActionListener{ 

    private KeyboardView kv; 
    private Keyboard keyboard; 

    private boolean caps = false; 

    @Override 
    public void onKey(int primaryCode, int[] keyCodes) {   

    } 

    @Override 
    public void onPress(int primaryCode) { 
    } 

    @Override 
    public void onRelease(int primaryCode) {    
    } 

    @Override 
    public void onText(CharSequence text) {  
    } 

    @Override 
    public void swipeDown() { 
    } 

    @Override 
    public void swipeLeft() { 
    } 

    @Override 
    public void swipeRight() { 
    } 

    @Override 
    public void swipeUp() { 
    } 
} 

6) Non aggiornare semplicemente i metodi di azione, in base all'esempio o al doc. Questo è tutto ...

Problemi correlati