android – 从TextView获取所选文本

前端之家收集整理的这篇文章主要介绍了android – 从TextView获取所选文本前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试获取用户在TextView中选择的文本,
我不想使用 android:textIsSelectable =“true”来允许我的用户复制/粘贴操作

但是,我不知道如何在显示操作栏菜单获取文本,目标是实现类似行为的Google书籍:您选择一个单词并为其提供定义.

解决方法

我认为您正在寻找的是TextView.setCustomSelectionActionModeCallback.这将允许您在选择文本时创建自己的ActionMode.Callback.然后,您可以使用TextView.getSelectionStart和TextView.getSelectionEnd在选择MenuItem时检索所选文本.这是一个简单的例子:
mTextView.setCustomSelectionActionModeCallback(new Callback() {

        @Override
        public boolean onPrepareActionMode(ActionMode mode,Menu menu) {
            // Remove the "select all" option
            menu.removeItem(android.R.id.selectAll);
            // Remove the "cut" option
            menu.removeItem(android.R.id.cut);
            // Remove the "copy all" option
            menu.removeItem(android.R.id.copy);
            return true;
        }

        @Override
        public boolean onCreateActionMode(ActionMode mode,Menu menu) {
            // Called when action mode is first created. The menu supplied
            // will be used to generate action buttons for the action mode

            // Here is an example MenuItem
            menu.add(0,DEFINITION,"Definition").setIcon(R.drawable.ic_action_book);
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode mode) {
            // Called when an action mode is about to be exited and
            // destroyed
        }

        @Override
        public boolean onActionItemClicked(ActionMode mode,MenuItem item) {
            switch (item.getItemId()) {
                case DEFINITION:
                    int min = 0;
                    int max = mTextView.getText().length();
                    if (mTextView.isFocused()) {
                        final int selStart = mTextView.getSelectionStart();
                        final int selEnd = mTextView.getSelectionEnd();

                        min = Math.max(0,Math.min(selStart,selEnd));
                        max = Math.max(0,Math.max(selStart,selEnd));
                    }
                    // Perform your definition lookup with the selected text
                    final CharSequence selectedText = mTextView.getText().subSequence(min,max);
                    // Finish and close the ActionMode
                    mode.finish();
                    return true;
                default:
                    break;
            }
            return false;
        }

    });

结果

猜你在找的Android相关文章