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:
- Cómo abrir el tablero dentro del diseño en android
- Cómo abrir mediante programación teclado táctil de Android de acuerdo con el tipo de entrada html en android webview
- Ajusta scrollview cuando el teclado está hacia arriba
- ¿Hay alguna manera en Android de saber si un dispositivo de los usuarios tiene un teclado real o no?
- Keycode para Android minimizar el botón de teclado suave
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!
- ¿Cómo comprobar si el teclado nativo / hardware se utiliza?
- Ocultar teclado después de búsquedas de usuarios?
- ¿Cómo abrir el teclado numérico cuando haga clic en EditText?
- Teclado suave de Samsung pierde las pulsaciones de teclado después del cambio de enfoque
- Controlar los botones Ok SoftKeyboard Android
- El teclado de Android WebView oculta el campo de entrada en el fragmento en android
- Teclado personalizado con funcionalidad deslizar en android?
- Teclado IME con emojis
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:
- Crear un archivo de diseño de teclado en la carpeta de recursos
- Cree una instancia de
Keyboard
y establézcala enKeyboardView
- 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; } }
- "Java: el paquete org.apache.cordova no existe" al completar Cordova en Android Studio
- Se barajaron las imágenes al desplazar un ListView con un ViewHolder