2016-07-12 26 views
8

Farklı giriş yöntemleri görüntülemek için TabLayout kullanıyorum. İlk sekme düğmeler içerir ve dördüncü sekme bu Sekme Çıkışında gömülü standart klavyeyi görüntülemelidir. o böyle görünmeli Burada bir ekran görüntüsü:Android'de sanal klavyeyi görüntüleyin TabLayout

enter image description here

TabLayout şimdiye kadar çalışır. Bir KeyboardView ile bir düzen XML dosyası oluşturmaya çalıştım. TabLayout böylece kendisi çalışıyor ...

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

ben basit TextView'un kullanıyorum alırsanız uygulama metni görüntüler: Ama uygulaması bir klavyeyi göstermiyor

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

Benim sorum Basit bir klavye nasıl oluşturabilirim ve TabLayout içinde nasıl görüntüleyebilirim? Teşekkür ederim!

+0

Emin değilim, ancak KeyboardView belirli bir yüksekliğe belirterek çalıştın? 250dp gibi bir şey mi? –

cevap

1

Ben Düzen XML eklemek zorunda örneğin kod bazı satırları gerekli:

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

İki yıl önce bir IME yazdım. Davanız benimkinden farklı ama fikir aynı olmalı.

Sorun, klavye görünümü için Klavye Düzeni belirtmediniz.

@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 değişken kedi setKeyboard aracılığıyla ayarlanabilir:

koduna bakınız. Ne yapmalıyım:

  1. kodu çalıştırmayı deneyin bir Keyboard örneğini oluşturun ve KeyboardView
  2. olarak ayarlayın kaynak klasöründe bir klavye düzeni dosyası oluşturun.
1

Ben başka bilgileri hakkında yazmadım, bu yüzden duygusu, This Example doc dayalı, klavye ile çalışmak için tam adımları yazma veya yapmak düşünüyorum: aktiviteye (özellikler ekleyerek

1 Değişim Manifest veya hizmet)

<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) Klavye özellikleri olan ana dosya oluşturun:

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

<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) bir hizmeti tanımlayın veya etkinliğim bu arabirimleri genişletebilir:

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() { 
    } 
} 
klavye tuşlarını (sadece bir örnektir) tanımlayın (sizin yaptığınız gibi)

<?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) düzeninde KeyboardView tanımla

6) Örnek veya doc temel alınarak, yalnızca eylem yöntemlerini güncelleyin. Hepsi bu kadar ...Benim parçada