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....
        }
}

ただし、 を使用して WebView を取得したのでfindViewById、メソッドをオーバーライドする方法はありますか?

PS: 実際にははるかに複雑なケースであり、 in を最初に呼び出すため、onKeyDowninをオーバーライドすることはできません。MainActivityonKeyDownWebView

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 に答える