Показать программную клавиатуру в AlertDialog с WebView внутри (Android) - PullRequest
15 голосов
/ 06 апреля 2011

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

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

Ответы [ 3 ]

23 голосов
/ 08 апреля 2011

Кажется, что лучшее решение - просто создать собственный диалог. В пользовательских диалоговых окнах вообще не отображается программная ошибка клавиатуры (она отображается именно тогда, когда это необходимо). Вот базовый код:

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 голосов
/ 28 октября 2017

Существует гораздо лучшее решение (с AlertDialog).

  1. Расширение класса 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;
        }
    }
    
  2. Используйте этот LocalWebView вместо исходного WebViewв макете, который вы установили для AlertDialog в качестве представления содержимого.

0 голосов
/ 01 июля 2015

Если это все еще актуально, для меня проблема была связана с иммерсивным диалогом + веб-просмотром.

Я переопределил диалог show для достижения эффекта погружения, установив флаг - НЕСосредоточившись на диалоговом окне, как только я удалил его, я потерял immersivnes, но теперь мой веб-диалог выскакивает с клавиатуры ...

...