4

我创建了一个自定义ActionMode.Callback,以便在WebView. 它在 Android 4.4 中运行良好,但在 4.1-4.3 中,选择句柄没有出现。我仍然可以对突出显示的单个单词执行自定义操作,但由于缺少句柄,无法更改选择。

此外,当ActionMode被销毁时,选择不会从屏幕上清除。相反,如果用户在其他地方点击以清除选择,ActionMode则不会破坏。

我什至不确定这clearFocus()是我应该调用的方法来尝试删除选择。我评论了那条线,4.4 中的行为没有改变;它仍然完美无缺。

可以做些什么来解决这些问题?


这是我目前的实现:

public class CustomWebView extends WebView {

    private ActionMode.Callback mActionModeCallback;

    @Override
    public ActionMode startActionMode(Callback callback) {
        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.contextual_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 handlebars are moved.
            loadJavascript("javascript:getSelectedTextInfo()");
            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.button_1:
                // do stuff
                break;
            case R.id.button_2:
                // do stuff
                break;

            ... // cases for other buttons

            default:
                break;
            }

            mode.finish(); // Action picked, so close the CAB
            return true;
        }

        // Called when the user exits the action mode
        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // TODO This does not work in 4.3 (and probably anything older).
            clearFocus(); // Remove the selection highlight and handles.

        }
    }
}
4

1 回答 1

0

我从来没有弄清楚我做错了什么导致了这种行为。幸运的是,我确实找到了一种解决方案,可以适当地显示车把,并允许自定义操作。该解决方案可以在这个问题上找到:https ://stackoverflow.com/a/22391169/2608235

简而言之,与其创建自己的ActionMode. 文件,不如删除默认的选择操作(复制、粘贴等),并使用您自己的menu.xml布局MenuInflater替换它们onActionModeStartedonClick为您的菜单元素定义一个,在您的 中实现该方法Activity,然后您就完成了。

于 2016-02-19T05:23:06.663 回答