Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


NumberPicker en AlertDialog siempre activa el teclado. ¿Cómo desactivar esto?

A todos,

Estoy intentando conseguir un NumberPicker simple para trabajar en un AlertDialog. El problema es que cada vez que aumenta / disminuye el valor en el número de pico, el teclado se activa.

  • "Android.database.sqlite.SQLiteException: no hay tal tabla" error en casos raros
  • ¿Cómo resaltar el elemento ListView en el tacto?
  • Android: Modo de inicio 'instancia única'
  • Android: ¿cómo puedo crear el objeto File desde el archivo de activos?
  • NotificationCompat.setStyle () no puede obtener Notification.MediaStyle
  • La biblioteca de soporte de Android aumenta el tamaño del APK mucho
  • Hay muchos mensajes que describen este problema, pero ninguna de las sugerencias funciona. Yo he tratado:

    android:configChanges="keyboard|keyboardHidden" 

    Y

     inputManager.hideSoftInputFromWindow(currentView.getWindowToken(), 0); 

    Y

     getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 

    He intentado llamar a estas funciones antes y después de la inicialización (dialog.show ()), en los eventos de pulsaciones de teclas (utilizando los oyentes, obviamente), etc, pero no hay suerte hasta ahora.

    El código completo:

    Popup.xml

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <NumberPicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/myNumber" android:configChanges="keyboard|keyboardHidden" /> </RelativeLayout> 

    Y la función llamante:

     AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }); builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { return; } }); View view = getLayoutInflater().inflate(R.layout.popup, null); builder.setView (view); final AlertDialog dialog = builder.create (); NumberPicker picker = (NumberPicker) view.findViewById(R.id.myNumber); picker.setMinValue(0); picker.setMaxValue(999); dialog.getWindow(). setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); dialog.show(); 

    Cualquier ayuda apreciada

    Barry

  • Cómo poner una línea de divisor horizontal entre editar texto en una actividad
  • Android: No se pudo encontrar com.android.support:support-v4:23.2.1
  • Animar la transición entre fragmentos
  • ¿Cómo puedo cambiar el fondo de los cuadros de diálogo de alerta de Android?
  • No se puede actualizar la vista, el enlace de datos no funciona - Angularjs y PhoneGap
  • Android MVP open Actividad de Presenter, anti-pattern?
  • 4 Solutions collect form web for “NumberPicker en AlertDialog siempre activa el teclado. ¿Cómo desactivar esto?”

    En realidad, aunque la solución anterior funciona perfectamente, hay una manera más fácil.

     picker.setDescendantFocusability(NumberPicker.FOCUS_BLOCK_DESCENDANTS); 

    Esto es todo lo que se necesita. ¡¡¡¡De todos modos gracias por las respuestas!!!! Todos los derechos reservados

    Dado que no hay acceso a los botones de NumberPicker, es "imposible" de hacer.

    Hice hack sucio rápido para hacer frente a ella.

    Primero agregue el comedor del foco a la disposición, en este caso Botón con el tamaño 0:

     <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" > <NumberPicker android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/myNumber" android:configChanges="keyboard|keyboardHidden" /> <Button android:id="@+id/myBtn" android:layout_width="0dp" android:layout_height="0dp" /> </RelativeLayout> 

    Necesitamos atrapar el evento de hacer clic en inclement / decrement botones, elegí OnValueChangedListener, no podría encontrar algo mejor.

      EditText edit = null; try { final Field[] fields = picker.getClass().getDeclaredFields(); for (Field f : fields) { if (EditText.class.equals(f.getType())) { f.setAccessible(true); edit = (EditText) f.get(picker); } } } catch (IllegalAccessException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } if (edit != null) { final EditText finalEdit = edit; final InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); picker.setOnValueChangedListener(new NumberPicker.OnValueChangeListener() { @Override public void onValueChange(NumberPicker numberPicker, int i, int i1) { dialog.findViewById(R.id.myBtn).requestFocusFromTouch(); imm.hideSoftInputFromWindow(finalEdit.getWindowToken(), 0); } }); } 

    Esto no es una solución recomendada. Espero que alguien encuentre algo mejor. Úselo sólo con fines educativos 😉

    android:configChanges atributo android:configChanges pertenece a su archivo Manifest.xml , no al diseño. Pero si usted está ocultando el teclado de allí, usted es probablemente el mejor de usar

     android:windowSoftInputMode="stateAlwaysHidden" 

    También debe intentar utilizar getWindow() en su Activity lugar de sólo el getWindow() Dialog y ver si eso ayuda. Esta es probablemente la mejor solución ya que la primera (ocultando el manifiesto) mantendrá el teclado oculto durante toda la Actividad.

    XML:

     <NumberPicker ... android:descendantFocusability="blocksDescendants" /> 
    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.