如何在TextView中的选定文本上设置侦听器

我正在使用ActionMode.Callback,但我需要知道文本何时完成被选中......例如

在这里输入图像描述


我想你可以在这里找到你的答案:

Android文本选择监听器

您在此寻找的关键词,以帮助您进行研究,只要您的目标是蜂窝或更新的, ActionMode

API文档(向下滚动到“使用上下文动作模式”)在解释事情方面做得很好,一旦你找到了你要找的东西,这是他们使用最大的障碍,但基本上你需要什么要做的是这样的:

  • 设置你的EditText是可选的( android:textIsSelectable="true"setTextIsSelectable(true);
  • 实现ActionMode.Callback接口并提供您自己的菜单项。
  • 注意:如上所述,这仅适用于API级别11+。 如果您的目标是早期的平台,获取文本选择的事件要复杂得多。


    在.xml中:

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textIsSelectable="true" />
    

    在班上:

    textview.setCustomSelectionActionModeCallback(new callback(textview));
    ...
    public class callback implements Callback {
    
        private TextView mTextView;
    
        public callback(TextView text) {
            this.mTextView = text;
    
        }
    
        @Override
        public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
            int start = mTextView.getSelectionStart();
            int end = mTextView.getSelectionEnd();
            Spannable wordtoSpan = (Spannable) mTextView.getText();
    
            switch (item.getItemId()) {
    
            case R.id.item_blue:
                wordtoSpan.setSpan(new BackgroundColorSpan(Color.BLUE), start
                        , end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    
            singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.BLUE);
                return true;
    
            case R.id.item_green:
                wordtoSpan.setSpan(new BackgroundColorSpan(Color.GREEN), start, end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.GREEN);
                return true;
    
            case R.id.item_red:
                wordtoSpan.setSpan(new BackgroundColorSpan(Color.RED), start, end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.RED);
                return true;
            case R.id.item_yellow:
                wordtoSpan.setSpan(new BackgroundColorSpan(Color.YELLOW), start, end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.YELLOW);
                return true;
            case R.id.item_erase:
                wordtoSpan.setSpan(new BackgroundColorSpan(Color.TRANSPARENT), start, end,
                        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                singlenton.getInstance().getDatabase().createMarkText(mTextView,Color.TRANSPARENT);
                return true;
            }
            return false;
        }
    
        @Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            mode.setTitle("Selecione a cor");
            mode.getMenuInflater().inflate(R.menu.menu_text_context, menu);
    
            return true;
        }
    
        @Override
        public void onDestroyActionMode(ActionMode mode) {
    
        }
    
        @Override
        public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
            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;
        }
    
    }
    
    链接地址: http://www.djcxy.com/p/11841.html

    上一篇: How to set up a listener on the selected text in TextView

    下一篇: Make Code Analysis stop warning about a certain variable name