Ich zeige einen Dialog mit einer Edittext-Ansicht an. Das Softkeyboard wird jedoch nur geöffnet, wenn der Benutzer in der Bearbeitungsansicht drückt. Also habe ich versucht, einen InputMethodManager mit dem folgenden Code aufzurufen.
InputMethodManager imm =
(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);
Das dialogField ist das Eingabefeld. Wann genau soll ich das tun? Ich habe es in der onStart () -Methode des Dialogfelds versucht, aber es passiert nichts. Ich habe auch versucht, den Fokus für das dialogField anzufordern, aber das ändert nichts.
Ich habe auch diesen Code ausprobiert
dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
public void onFocusChange (View v, boolean hasFocus)
{
if (hasFocus)
{
Main.log("here");
dialogInput.getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
/*
InputMethodManager mgr =
(InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(dialogField,0);
*/
}
}
});
in beiden Versionen. Es möchte aber keine Softtastatur erscheinen. Das Main.log ist nur ein Protokoll, das mir zeigt, dass die Funktion tatsächlich aufgerufen wird. Und ja, es heißt.
Ich könnte die Tastatur mit dem SHOW_FORCED-Flag erhalten, bevor der Dialog geöffnet wird. Aber dann wird es beim Verlassen nicht geschlossen. Und das kann ich nur, bevor ich den Dialog zeige. In Rückrufen funktioniert es auch nicht.
Antworten:
Tolle Frage, ich habe auch versucht, das zu tun und eine Lösung gefunden.
Mit der Dialog Builder-Klasse müssen
AlertDialog.Builder
Sie den Dialog wie folgt aufrufen:AlertDialog.Builder builder = new AlertDialog.Builder(); AlertDialog dialog; builder.set... dialog = builder.create(); dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.show();
Das hat bei mir gut funktioniert.
Hinweis: Sie müssen
import android.view.WindowManager.LayoutParams;
für den konstanten Wert dort.quelle
setSoftInputMode()
der vorher aufgerufen werden mussshow()
.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dieonCreate()
Methode auf.AlertDialog dialog = new AlertDialog.Builder(this).create(); dialog.show(); Window window = dialog.getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
quelle
Kotlin
Hier ist der getestete Code.
val dialog = AlertDialog.Builder(requireContext()).apply { setTitle(…) setView(editText) setPositiveButton(…) setNegativeButton(…) } val window = dialog.show().window window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
Stellen Sie sicher, dass Sie über die Methode auf die
window
Eigenschaft zugreifenshow()
. Das Abrufenwindow
von dercreate()
Methode kehrtenull
für mich zurück, sodass die Tastatur nicht angezeigt wurde.Importieren
AlertDialog
ausandroidx.appcompat.app.AlertDialog
. ImportierenWindowManager
ausandroid.view
.quelle
Dialogfragment mit Kotlin
onStart-Methode überschreiben
override fun onStart() { super.onStart() dialog.window?. setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE ) }
Wenn Sie nach dem Schließen schließen möchten, überschreiben Sie die Entlassungsmethode mit dem folgenden Code
override fun onDismiss(dialog: DialogInterface?) { val inputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager inputMethodManager.hideSoftInputFromWindow(activity?.currentFocus?.windowToken, InputMethodManager.HIDE_IMPLICIT_ONLY) }
quelle