如何在WebView上设置键盘焦点?

时间:2011-03-06 23:22:32

标签: android keyboard keyboard-events

我有一个简单的WebView示例应用程序,它具有以下布局:

<?xml version="1.0" encoding="utf-8"?>
<!-- This file is /res/layout/main.xml -->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="fill_parent"
              android:layout_height="fill_parent">

  <EditText android:id="@+id/urlToLoad"
    android:hint="Type url to load"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"/>

  <Button android:id="@+id/webviewgo"
    android:text="Go"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:enabled="false" />

  <com.example.exWebView  xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
  />    

</LinearLayout>

它按预期工作,但我对将键盘事件路由到WebView 感兴趣。目前,即使我选择了WebView(和滚动等)​​,当我输入任何键时,它会转到EditText控件...这不是我想要的。

如何将键盘事件转到WebView?

1 个答案:

答案 0 :(得分:1)

根据this thread,您需要做的就是在主活动的OnCreate()内部设置一个带有requestFocus()的OnTouchListener():

    mWebView = (MyWebView) findViewById(R.id.webview);
    mWebView.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; 
                }
        });

此代码基本上做的是在到达您的视图时将焦点锁定在任何向下或向上事件上。请注意它是如何返回false的,以便事件可以进一步传播到其他视图,就像它没有被处理一样。