5

WebView从我的布局中得到:

        WebView webView = (WebView) rootView.findViewById(R.id.myWebView);

我想覆盖onKeyDown. 通常,我可以通过子类化来覆盖它。

        WebView webView = new WebView(this) {

        @Override
        public boolean onKeyDown (int keyCode, KeyEvent event) {
        // Do my stuff....
        }
}

但是,由于我通过 using 获得了 WebView findViewById,有没有办法覆盖该方法?

PS:这实际上是一个复杂得多的情况,我不能 Override onKeyDownin MainActivity,因为它首先调用onKeyDownin WebView

4

1 回答 1

7

如果要覆盖某些方法,则必须创建一个自定义WebView类,其中extends WebView.

它看起来像这样:

public class CustomWebView extends WebView {

    public CustomWebView(Context context) {
        this(context, null);
    }

    public CustomWebView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
    }

    public CustomWebView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        /* any initialisation work here */
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        /* your code here */
        return super.onKeyDown(keyCode, event);
    }

}

为此,您必须相应地更改您的 XML 布局文件:

<com.example.stackoverflow.CustomWebView
    android:id="@+id/webview"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

此外,当您为 充气时WebView,请确保将其转换为正确的类型,即CustomWebView.

CustomWebView webView = (CustomWebView) findViewById(R.id.webview);

否则,您将获得一个java.lang.ClassCastException.

于 2013-02-26T20:43:32.427 回答