Почему программная клавиша не отображается во фрагменте с WebView - PullRequest
6 голосов
/ 19 апреля 2011

Я использую пакет совместимости, и у меня есть Fragment, который возвращает WebView в onCreateView.Проблема в том, что если во время onCreate Activity фрагмент не был добавлен, то при нажатии текстового поля внутри WebView программная клавиатура не отображается.Если устройство поворачивается после добавления пользовательского веб-фрагмента, воссоздавая действие, то при нажатии на текстовое поле отображается программная клавиша.

Просто для ясности Вот два различных сценария

public void onCreate(Bundle state){
   if(state == null){
      WebFragment web = new WebFragment();
      getSupportFragmentManager.beginTransaction().add(android.R.id.content, web).commit();
   }
}



public void onClick(View v){
      WebFragment web = new WebFragment();
      getSupportFragmentManager.beginTransaction().add(android.R.id.content, web).commit();
}

В первом случае при добавлении фрагмента в методе Activity onCreate веб-представление, содержащееся во фрагменте, работает так же, как и при нажатии текстовых полей.Однако во втором примере ничего не происходит при щелчке текстового поля в веб-представлении, если вы не поворачиваете устройство после отображения веб-просмотра.Может ли кто-нибудь предложить решение, если мне нужно создать новое действие для того, чтобы мой фрагмент работал правильно, это, во-первых, лучше, чем цель фрагмента.

Ответы [ 2 ]

11 голосов
/ 12 августа 2011

Добавьте это к методу onCreateView фрагмента

webview.setOnTouchListener(new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
            case MotionEvent.ACTION_UP:
                if (!v.hasFocus()) {
                    v.requestFocus();
                }
                break;
        }
        return false;
    }
});  

Протестировано с Android 2.3.3 и 3.2.0.

На основе проблема # 7189 и StackOverflow

0 голосов
/ 21 октября 2013

Также решение от RuslanK работает для меня

Создайте класс, который расширяет WebView

private class MyWebView extends WebView {

public MyWebView(Context context, AttributeSet attrs) {
    super(context, attrs);
 }

// Note this!
@Override
public boolean onCheckIsTextEditor() {
    return true;
}

@Override
public boolean onTouchEvent(MotionEvent ev)     {
    switch (ev.getAction())         {
        case MotionEvent.ACTION_DOWN:
        case MotionEvent.ACTION_UP:
            if (!hasFocus())
                requestFocus();
        break;
    }

    return super.onTouchEvent(ev);
}
}

, а затем добавьте в макет xml свой вид:

<com.example.view.MyWebView
    android:id="@+id/vw"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />

и т. Д., И т. Д. В коде ...

MyWebView webView = (MyWebView) parent.findViewById(R.id.vw);
webView.setVerticalScrollBarEnabled(false);
webView.setHorizontalScrollBarEnabled(false);
webView.requestFocus(View.FOCUS_DOWN);
webView.loadUrl(url);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...