2016-07-12 24 views
8

Używam TabLayout do wyświetlania różnych metod wprowadzania. Pierwsza karta zawiera przyciski, a czwarta karta powinna wyświetlać standardową klawiaturę osadzoną w TabLayout. Oto zrzut ekranu, jak to powinno wyglądać:Wyświetl wirtualną klawiaturę w Androidzie TabLayout

enter image description here

TabLayout działa do tej pory. Próbowałem utworzyć plik XML układu z widokiem klawiatury. Ale aplikacja nie wyświetla klawiaturę:

<?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" 
    /> 

Jeśli używam prostego TextView, aplikacja wyświetla tekst ... więc TabLayout sama pracuje:

<?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> 

Moje pytanie jak utworzyć prostą klawiaturę i wyświetlić ją w TabLayout? Dziękuję Ci!

+0

Nie jestem pewien, ale czy spróbować określające pewną wysokość do KeyboardView? Jak około 250dp czy coś takiego? –

Odpowiedz

1

W moim fragmentu musiałem kilka linijek kodu, na przykład musiałem dodać XML układ:

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

Napisałem IME około dwa lata temu. Twoja sprawa jest inna niż moja, ale pomysł powinien być taki sam.

Problem polega na tym, że w widoku klawiatury nie określono układu klawiatury Layout.

Patrz kod:

@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); 
     } 
    } 

mKeyboard zmienny kot być ustawiony poprzez setKeyboard. Co należy zrobić, to:

  1. Utwórz plik układ klawiatury w folderze zasobów
  2. utworzyć instancję Keyboard i ustaw go na KeyboardView
  3. Spróbuj uruchomić kod.
1

nie pisałem o wszelkich innych informacji, więc myślę sensu pisać pełne kroki do pracy z klawiaturą, na podstawie dokumentu, lub This Example:

1 Zmień Manifest dodając właściwości (do aktywności lub usługa)

<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) Utwórz plik główny o właściwościach klawiatury:

<?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) Definiowanie KeyboardView w układzie (jak ty)

<?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) Definiowanie klawiszy klawiatury (tylko przykład):

<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) określa usługę lub przedłużyć ten interfejsy w 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) Niż tylko zaktualizuj metody działania, na podstawie przykładu lub dokumentu. To wszystko ...

Powiązane problemy