Показать мягкую клавиатуру в AlertDialog с помощью WebView внутри (Android)
В моем приложении для Android я создаю AlertDialog
, у которого есть WebView
внутри. WebView
загружает веб-страницу, требующую входа пользователя. Однако, когда я нажимаю текстовые поля в WebView
, мягкая клавиатура не появляется. Я вообще знаю этот вопрос (Android: выпуск 7189); однако в моем случае предлагаемое решение, похоже, не работает, поскольку я использую внешний веб-сайт, а не просто простую форму HTML.
Идеальное решение было бы, если бы клавиатура появилась, когда пользователь нажал на текстовые поля веб-сайта. Однако наличие клавиатуры вместе с AlertDialog
также будет работать. Любые идеи?
Ответы
Ответ 1
Кажется, что лучшим решением является просто создать пользовательский диалог. У пользовательских диалогов вообще нет ошибки в мягкой клавиатуре (она отображается точно, когда это необходимо). Вот базовый код:
Dialog dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_LEFT_ICON);
dialog.setContentView(R.layout.dialog);
dialog.setTitle("My great title");
dialog.setCancelable(true);
dialog.show();
dialog.setFeatureDrawableResource(Window.FEATURE_LEFT_ICON, R.drawable.icon);
WebView vw = (WebView) dialog.findViewById(R.id.wv);
Ответ 2
Там намного лучшее решение (с AlertDialog).
-
Расширить класс WebView.
public static class LocalWebView extends WebView {
public LocalWebView(Context context) {
super(context);
}
public LocalWebView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public LocalWebView(Context context, AttributeSet attrs, int defStyleAttr, boolean privateBrowsing) {
super(context, attrs, defStyleAttr, privateBrowsing);
}
@Override
public boolean onCheckIsTextEditor() {
return true;
}
}
-
Используйте этот LocalWebView вместо исходного WebView в макете, который вы устанавливаете в AlertDialog как просмотр содержимого.
Ответ 3
Если это все еще актуально, для меня проблема связана с иммерсивным диалогом + webview.
Я переопределяю метод show диалога, чтобы достичь погружения, установив флаг - НЕ ФОКУС в диалоговое окно, после того как я удалил его, я потерял immersivnes, но теперь мой веб-диалог появляется на клавиатуре...