Mostrar teclado virtual en android TabLayout

Estoy usando TabLayout para mostrar diferentes métodos de entrada. La primera pestaña contiene botones y la cuarta pestaña debe mostrar el teclado estándar incrustado en este TabLayout. Aquí una captura de pantalla cómo debería ser:

Introduzca aquí la descripción de la imagen

El TabLayout funciona hasta ahora. Intenté crear un archivo XML de diseño con un KeyboardView. Pero la aplicación no muestra un teclado:

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

Si estoy usando un Textview simple, la aplicación muestra el texto … así que el propio TabLayout funciona:

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

Mi pregunta es ¿Cómo puedo crear un teclado simple y mostrarlo dentro de TabLayout? ¡Gracias!

Escribí un IME hace unos dos años. Su caso es diferente del mío, pero la idea debe ser la misma.

El problema es que no especificó un diseño de teclado para la vista de teclado.

Vea el código:

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

La variable mKeyboard cat se puede establecer a través de setKeyboard . Lo que debe hacer es:

  1. Crear un archivo de diseño de teclado en la carpeta de recursos
  2. Cree una instancia de Keyboard y establézcala en KeyboardView
  3. Intente ejecutar el código.

No escribí sobre ninguna otra información, así que creo que tiene sentido escribir los pasos completos para trabajar con el teclado, basado en doc, o, este ejemplo :

1 Cambiar Manifiesto añadiendo propiedades (a actividad o servicio)

 <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) Cree el archivo principal con las características del teclado:

 <?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) Definir KeyboardView en el diseño (como lo hizo)

 <?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) Defina las teclas del teclado (sólo un ejemplo):

 <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) Definir un servicio o ampliar estas interfaces en 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) Que sólo actualizar los métodos de acción, basados ​​en el ejemplo o doc. Eso es todo…

En mi fragmento necesitaba algunas líneas de código, por ejemplo tuve que añadir un Layout XML:

 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; } } 
  • Desplácese la página cuando el teclado suaves aparece
  • Obtener la posición del cursor en Android en Editar texto?
  • Método onBackPressed no funciona correctamente
  • Teclado Android Entrar / Siguiente Button handler
  • Agregue dos puntos al teclado InputType.TYPE_CLASS_NUMBER
  • Teclado personalizado sombra clave de teclado eliminar
  • Android onKeyDown () no se ejecuta al presionar el botón Atrás
  • El teclado Android se esconde EditText
  • Problema con el teclado al enfocar el texto de edición de fondo en Android
  • EditText con teclado numérico por defecto, pero permitiendo caracteres alfabéticos
  • Anulación del botón de menú físico en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.