2

Android コンテキスト アクション バーからCOPY、SELECT ALL、およびFINDを削除し、カスタム メニュー項目を追加したいと考えています。

ここに画像の説明を入力

これは、webview でテキストを選択しているときに表示されます。jsを使用してwebviewにテキストハイライトを追加しようとしています。

4

2 に答える 2

2

目的を達成するには、まったく新しいコンテキスト アクション バーを作成する必要があります。これは、カスタム を作成することによって行われますActionMode。内で、WebViewを実装するネストされたクラスを作成しますActionMode.Callback。これをテンプレートとして使用できます。

public class CustomWebView extends WebView {

    private ActionMode.Callback mActionModeCallback;

    @Override
    public ActionMode startActionMode(ActionMode mode) {
        // This block is directly from the WebView source code.
        ViewParent parent = getParent();
        if (parent == null) {
            return null;
        }

        mActionModeCallback = new CustomActionModeCallback();
        return parent.startActionModeForChild(this, mActionModeCallback);
    }

    private class CustomActionModeCallback implements ActionMode.Callback {
        // Called when the action mode is created; startActionMode() was called
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            // Inflate a menu resource providing context menu items
            MenuInflater inflater = mode.getMenuInflater();
            inflater.inflate(R.menu.context_menu, menu);
            return true;
        }

        // Called each time the action mode is shown.
        // Always called after onCreateActionMode, but
        // may be called multiple times if the mode is invalidated.
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            // This method is called when the selection handlebars are moved.
            return false; // Return false if nothing is done
        }

        // Called when the user selects a contextual menu item
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {

            switch (item.getItemId()) {
            case R.id.menu_button_1:
                // Do stuff
                break;
            case R.id.menu_button_2:
                // Do stuff
                break;
            default:
                // You did not handle the action, so return false
                // If you have implemented a case for every button,
                // this block should never be called.
                return false;
            }

            // If you want to close the CAB immediately after 
            // picking an action, call mode.finish().
            // If you want the CAB to persist until the user clears the selection
            // or clicks the "Done" button, simply return true.
            mode.finish(); // Action picked, so close the CAB
            return true;
        }

        // Called when the user exits the action mode
        @Override
        public void onDestroyActionMode(ActionMode mode) {
            mode = null;
        }
    }

}


XML リソースで必ずメニューを定義してください。上記のテンプレートを使用する例を次に示します。

<!-- context_menu.xml -->
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_button_1"
        android:icon="@android:drawable/menu_button_1"
        android:showAsAction="always"
        android:title="@string/menu_button_1">
    </item>
    <item
        android:id="@+id/menu_button_2"
        android:icon="@drawable/menu_button_2"
        android:showAsAction="ifRoom"
        android:title="@string/menu_button_2">
    </item>

</menu>


SHAREWEB SEARCH を置き換えたいと明示的に述べていないことに気付きました。残念ながら、この方法ではすべての機能を自分で実装する必要があります。ただし、これらの関数のソース コード (私は から始めます) を掘り下げることができActionMode.javaます。CustomActionModeCallback.onActionItemClicked(ボタン イベントを処理する場所) に新しいケースを実装し、ソースから機能をコピーして貼り付け、対応するボタンを XML ファイルに追加します。これらの機能にネイティブ アイコンを使用することもできます。android:icon="@android:drawable/[name_of_desired_icon]

参考までに、この情報は Android Developers Web サイトからのものです。
http://developer.android.com/guide/topics/ui/menus.html#CAB

于 2014-04-16T14:38:26.003 に答える
0

これはあなたとメンバーの積み重ねに役立つかもしれません... https://github.com/btate/BTAndroidWebViewSelection

于 2013-05-07T06:58:04.613 に答える