16

在我的 Android 应用程序中,我创建了一个AlertDialogWebView内部的应用程序。WebView加载需要用户登录的网页。但是,当我单击 中的文本字段时,WebView不会出现软键盘。我一般都知道这个问题(Android:Issue 7189);但是,就我而言,建议的解决方案似乎不起作用,因为我使用的是外部网站,而不仅仅是一个简单的 HTML 表单。

完美的解决方案是当用户点击网站的文本字段时出现键盘。但是,让键盘与 一起出现AlertDialog也可以。有任何想法吗?

4

3 回答 3

26

似乎最好的解决方案是简单地创建一个自定义对话框。自定义对话框似乎根本没有软键盘错误(它会在需要时准确显示)。下面是一些基本代码:

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);
于 2011-04-08T08:04:58.717 回答
4

有更好的解决方案(使用 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. 在您设置为 AlertDialog 作为内容视图的布局中使用此 LocalWebView 而不是原始 WebView。

于 2017-10-28T20:29:49.113 回答
0

如果它仍然相关,对我来说,问题与沉浸式对话 + 网络视图有关。

我已经通过设置一个标志来覆盖对话框显示方法以实现沉浸式 - 不是在对话框窗口上聚焦,一旦我删除它,我就失去了 immersivnes 但现在我的网络对话框弹出键盘...

于 2015-07-01T15:01:49.677 回答