Подтвердить что ты не робот

Показать мягкую клавиатуру в AlertDialog с помощью WebView внутри (Android)

В моем приложении для Android я создаю AlertDialog, у которого есть WebView внутри. WebView загружает веб-страницу, требующую входа пользователя. Однако, когда я нажимаю текстовые поля в WebView, мягкая клавиатура не появляется. Я вообще знаю этот вопрос (Android: выпуск 7189); однако в моем случае предлагаемое решение, похоже, не работает, поскольку я использую внешний веб-сайт, а не просто простую форму HTML.

Идеальное решение было бы, если бы клавиатура появилась, когда пользователь нажал на текстовые поля веб-сайта. Однако наличие клавиатуры вместе с AlertDialog также будет работать. Любые идеи?

4b9b3361

Ответ 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, но теперь мой веб-диалог появляется на клавиатуре...