【问题标题】:Android WebView focus problemAndroid WebView焦点问题
【发布时间】:2010-11-27 21:18:42
【问题描述】:

我正在与 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 有时在触摸它时没有获得焦点,有时会得到它但保持在 WebView 字段周围的焦点矩形(橙色或绿色取决于您的手机)再次触摸后返回 EditText 组件(我可以在其中编写文本)!

无论如何,我找到的一个解决方案是在单击 WebView 时添加一个 touchListener 并请求焦点:

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 保持焦点矩形(绿色或橙色)围绕字段,无论它是否具有焦点。在下面的屏幕截图中,我的 EditText 具有焦点并接收文本,但 WebView 看起来仍然具有焦点。我试过 clearFocus 但这没有任何作用:

See the result

知道如何解决这个问题吗? 非常感谢您的帮助!

【问题讨论】:

标签: android focus android-widget webview


【解决方案1】:

确保扩展“ViewGroup”的父布局没有属性

android:descendantFocusability = "blocksDescendants" 防止子布局获得焦点

【讨论】:

  • 我想做相反的事情,我不想专注于内容,所以它对我有用:P 谢谢
【解决方案2】:

这有助于我集中注意力:

Webview.requestFocus(View.FOCUS_DOWN|View.FOCUS_UP);

这用于敏感触摸:

Webview.getSettings().setLightTouchEnabled(true);

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-05
      • 2013-10-07
      • 2019-11-10
      • 2015-11-16
      相关资源
      最近更新 更多