安卓 WebView 焦点问题

13

我正在解决WebView的焦点管理问题:WebView干扰了经典组件的焦点管理。这里有一个简单的应用程序,只有一个EditBox和一个加载Google的WebView!

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:and="http://schemas.android.com/apk/res/android"
              xmlns:webtag="http://schemas.android.com/apk/res/com.webtag"
              and:orientation="vertical" and:layout_width="fill_parent" and:layout_height="fill_parent">
    <LinearLayout and:id="@+id/HorizontalScrollView02"
                  and:layout_width="fill_parent" and:layout_height="wrap_content">
        <EditText and:id="@+id/EditText01"
                  and:layout_width="wrap_content" and:layout_height="wrap_content"
                  and:text="@+id/EditText01"/>
    </LinearLayout>
    <WebView and:id="@+id/uiContent"
             and:layout_weight="1"
             and:layout_width="fill_parent"
             and:layout_height="fill_parent"/>
</LinearLayout>

这里是Java代码:

public class WebtagActivity extends Activity
{
    // UI components.
    private WebView mContent;
    private EditText mUrl;


    @Override
    public void onCreate (Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        mContent = (WebView) findViewById(R.id.uiContent);
        mContent.getSettings().setJavaScriptEnabled(true);
        mContent.loadUrl("http://www.google.fr/");
    }
}

基于这个非常简单的例子,不可能在WebView上获得焦点(即Google搜索术语输入框)!但是,在初始化期间添加“mContent.requestFocus();”之后,情况会变得更好。如果我先点击WebView,我就可以从我的EditText切换到我的WebView...但是行为很快变得非常“不稳定”,有时在触摸它时WebView无法获得焦点,有时在另一个触摸返回EditText组件(其中我可以编写文本)之后,仍然保持对WebView字段周围的焦点矩形(橙色或绿色,具体取决于您的手机)!
无论如何,我找到的一个解决方案是添加一个touchListener,并在单击WebView时请求焦点:
mContent.setOnTouchListener(new View.OnTouchListener() { 
    @Override
    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; 
            }
    });

这解决了几乎所有问题(从经典组件切换到 WebView 和编写文本),除了一个问题:WebView 在字段周围保留了 focusRectangle(绿色或橙色),无论它是否具有焦点。在下面的截图中,我的 EditText 具有焦点并接收文本,但 WebView 仍然看起来具有焦点。我尝试使用 clearFocus,但没有任何作用:

请查看结果

有什么解决办法吗? 非常感谢您的帮助!


请看我在这里的答案:https://dev59.com/alHTa4cB1Zd3GeqPQEm7#48652004 只需使用onTouch事件即可。 - Jiří
3个回答

7
确保扩展了“ViewGroup”的父布局没有属性 android:descendantFocusability = "blocksDescendants",以防止子布局无法获得焦点。

我想做相反的事情,我不想把注意力放在内容上,所以这对我起作用了 :P 谢谢 - Muhammad Adil

5
这段代码可以解决聚焦问题: Webview.requestFocus(View.FOCUS_DOWN|View.FOCUS_UP); 这段代码可以使触摸更加灵敏: Webview.getSettings().setLightTouchEnabled(true);

2

只需在您的WebView布局中添加android:focusable="true"

<WebView android:id="@+id/uiContent"
    android:layout_weight="1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:focusable="true"/>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接