es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

El teclado se abre con un fragmento de diálogo hoja inferior sin tener siquiera EditText en la actividad o el fragmento.

No sé por qué, pero el teclado se abre automáticamente cuando abro BottomSheetDialogFragment desde otro fragmento. Lo intenté tanto con el componente de navegación como con el método antiguo. Lo intenté en API 24, 27, 30. En API 30 funciona bien, pero en 24 y 27 enfrento este problema. ¿Hay alguien aquí que esté enfrentando este problema? ¿Hay alguien que tenga una solución para este problema, por favor publique la respuesta?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Problema:

    El teclado se abre automáticamente al abrir BottomSheetDialogFragment desde otro fragment en API 24 y 27, pero no en API 30.

    Posibles causas:

    1. El método de entrada puede estar configurado para mostrarse automáticamente cuando una vista que puede recibir entrada gana el foco.
    2. Puede haber un problema con el orden en que las vistas ganan el foco, lo que hace que el método de entrada aparezca cuando no debería.

    Posibles soluciones:

    1. Desactivar la presentación automática del método de entrada:

      Agregue android:windowSoftInputMode="stateHidden" a la actividad o fragmento en el archivo AndroidManifest.xml.

    2. Establecer el foco manualmente:

      Puede anular el método onStart() de BottomSheetDialogFragment y establecer el foco en una vista específica, de la siguiente manera:

      @Override
      public void onStart() {
         super.onStart();
         getDialog().getWindow()
             .setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); // Desactivar presentación automática del método de entrada
         View focusedView = getView().findViewById(R.id.focused_view);
         if (focusedView != null) {
             focusedView.requestFocus();
             InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
             imm.hideSoftInputFromWindow(focusedView.getWindowToken(), 0);
         }
      }
      

    3. Utilizar un tema de diálogo personalizado:

      Defina un tema personalizado para BottomSheetDialogFragment que establezca windowSoftInputMode en stateHidden, de esta forma:

      <style name="CustomBottomSheetDialogTheme" parent="Theme.Design.BottomSheetDialog">
         <item name="android:windowSoftInputMode">stateHidden</item>
      </style>
      

      Luego, en el método onCreate() de BottomSheetDialogFragment, establezca el estilo en el tema personalizado de esta forma:

      @Override
      public void onCreate(@Nullable Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setStyle(DialogFragment.STYLE_NORMAL, R.style.CustomBottomSheetDialogTheme);
      }
      
    4. Actualizar a un nivel de API superior:

      Si es posible, actualizar a API 30 o superior puede resolver el problema.

Comments are closed.