Как показать текстовое поле внутри веб-просмотра, когда программная клавиатура активна? - PullRequest
0 голосов
/ 26 января 2019

Я хочу сфокусироваться на текстовом поле, потому что, когда я щелкаю текстовое поле, его блокирует экранная клавиатура Android, и для того, чтобы текстовое поле было видимым, пользователь должен прокручивать в основном вверх. Могу ли я сделать все это на Android или есть способ JavaScript динамически установить фокус на текстовом поле?

То, что я сделал, это поместил поля в rootView WebView и отступы в WebView, но он все равно не привел WebView в область, которая видна пользователю. Он просто обрезает боковые стороны веб-просмотра и не помещается на странице по текущему размеру WebView.

Я также пытался использовать setInitialScale(), но это влияет только на новый loadUrl(), но в моем случае все происходит на одной странице.

Я также пытался использовать scrollTo(), но поскольку на одной из моих страниц с текстовым полем не было прокрутки, она также не работала. Я знаю, что в приложении Chrome есть какая-то особенность, заключающаяся в том, что при уменьшении масштаба нажатие на текстовое поле фокусирует его, увеличивая его.

InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);

if (imm.isAcceptingText()) {
    Log.d(TAG, "Software Keyboard was shown");

    if(!isKeyboardShownRecently){
        ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) swiLyt.getLayoutParams();
        //lp.setMargins( 50, 0, 50, 50);
        webView.setPadding(0, 0, 0, heightDiff);
        swiLyt.setLayoutParams(lp);

        webView.getSettings().setBuiltInZoomControls(true);
        webView.setInitialScale(150);

        isKeyboardShownRecently = true;
    }
} else {
    Log.d(TAG, "Software Keyboard was not shown");

    if (isKeyboardShownRecently){
        ConstraintLayout.LayoutParams lp = (ConstraintLayout.LayoutParams) swiLyt.getLayoutParams();
        //lp.setMargins( 0, 0, 0, 0);
        swiLyt.setLayoutParams(lp);

        isKeyboardShownRecently = false;
    }

}
...