【问题标题】:Webview has focus but virtual keyboard doesn't showWebview 有焦点但虚拟键盘不显示
【发布时间】:2017-05-20 17:22:11
【问题描述】:

我试过这个:Tapping form field in WebView does not show soft keyboard

我在创建时调用的设置函数是

public void begin() {
    EditText t = (EditText) findViewById(R.id.ccentry);
    t.setSelected(false);
    t.clearFocus();

    final WebView webview = (WebView) findViewById(R.id.webview);

    WebSettings webSettings = webview.getSettings();
    webSettings.setJavaScriptEnabled(true);

    webview.addJavascriptInterface(new MyJavaScriptInterface(this), "HtmlViewer");

    View.OnTouchListener l =  new View.OnTouchListener() {
        public boolean onTouch(View v, MotionEvent event) {
            switch (event.getAction()) {
                case MotionEvent.ACTION_DOWN:
                case MotionEvent.ACTION_UP:
                    Log.v("biscuit-focus", "focus");
                    if (!v.hasFocus()) {
                        Log.v("biscuit-focus-down", "focusDOWN");
                        v.requestFocus(View.FOCUS_DOWN);
                    }
                    break;
            }
            return false;
        }
    };

    webview.setOnTouchListener(l);

    webview.setWebViewClient(new WebViewClient() {
        @Override
        public void onPageFinished(WebView view, String url) {
            printDebug();
            webview.requestFocus(View.FOCUS_DOWN);
            if (!madeTimer) {
                madeTimer = true;
                timer = new Timer();

                timer.scheduleAtFixedRate(new TimerTask() {
                    public void run() {
                        handler.obtainMessage(1).sendToTarget();
                    }
                }, 5000, 5000);


            }
        }
    });

    webview.loadUrl("myapp.com");
}

当我向下滚动并点击文本字段时,我可以获得 USB 键盘输入。 biscuit-focus 日志显示但不显示 bicuit-focus-down

这是在运行 Lollipop 的 Pine64 上。

【问题讨论】:

标签: android webview


【解决方案1】:

你好尝试在你的清单中改变这个

<activity
            android:name=".ActivityName"
            android:windowSoftInputMode="adjustResize"
            android:screenOrientation="portrait"></activity>

【讨论】:

    【解决方案2】:

    您可以添加代码:

    它会 100% 工作。

     webview.getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
            @Override
            public boolean onPreDraw() {
                view.removeOnPreDrawListener(this);
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    
                // !Pay attention to return `true`
                // Chet Haase told to 
                return true;
            }
        });
    

    webview.requestFocus(View.FOCUS_DOWN);
    

    祝你好运!!!

    【讨论】:

    • 您好,我不得不将视图更改为 webview,因为我没有名为“view”的实例变量。然后我得到:“无法解决 removeOnPreDrawListener”
    • @quantumpotato,你好现在试试。希望会奏效。
    • 看起来您将视图更改为 web 视图。请阅读 m;y 第二句。 .getViewTreeObserver() 或 addOnPreDrawListener 未找到
    • 更改 view.removeOnPreDrawListener(this); ==> 。 mWebView.getViewTreeObserver().removeOnPreDrawListener(this);
    猜你喜欢
    • 2016-06-20
    • 1970-01-01
    • 2015-01-02
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-10-09
    • 2017-07-16
    相关资源
    最近更新 更多