Android textview获取选中的内容

1.首先设置textview可选:
android:textIsSelectable="true"


2.为textview设置监听
textView.setCustomSelectionActionModeCallback(callback2);

3.这个时候我们只要重写ActionMode.Callback2接口(需要判断sdk版本是否大于23,小于使用callback接口

private ActionMode.Callback2 callback2 = new ActionMode.Callback2()
    {
        @Override
        public boolean onCreateActionMode(ActionMode actionMode, Menu menu)
        {
            MenuInflater inflater = actionMode.getMenuInflater();
            inflater.inflate(R.menu.text_selected, menu);
            return true;
        }

        @Override
        public boolean onPrepareActionMode(ActionMode actionMode, Menu menu)
        {// 此方法用于清楚系统自带的meneitem(例如复制分享)
//            MenuInflater menuInflater = actionMode.getMenuInflater();
//            menu.clear();
//            menuInflater.inflate(R.menu.text_selected,menu);
//            return true;
            return false;
        }

        @Override
        public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem)
        {
            switch (menuItem.getItemId())
            {
                case R.id.toast:
                {
           
                    Toast.makeText(MainActivity.this, "toast:" , Toast.LENGTH_SHORT).show();
                    break;
                }

                case R.id.finish:
                {
                    MainActivity.this.finish();
                    break;
                }

                default:return false;
            }
            return true;
        }

        @Override
        public void onDestroyActionMode(ActionMode actionMode)
        {

        }
    };

4.要想获取所选中的内容,从callback2接口中看只有menu和menuitem,无法获取,但系统自带的有复制和剪切的功能,这时候就看一看系统是如何实现的。从设置监听的方法开始,见下面源码;监听事件被交由Edit这和类的mCustomSelectionActionModeCallback属性。

public void setCustomSelectionActionModeCallback(ActionMode.Callback actionModeCallback) {
        createEditorIfNeeded();
        mEditor.mCustomSelectionActionModeCallback = actionModeCallback;
    }
再看Editor这个类,对 mCustomSelectionActionModeCallback属性操作的是getCustomCallback()方法,
private Callback getCustomCallback() {
            return mHasSelection
                    ? mCustomSelectionActionModeCallback
                    : mCustomInsertionActionModeCallback;
        }
再看有哪些地方用到这个方法: Editor的内部类TextActionModeCallback
private class TextActionModeCallback extends ActionMode.Callback2 {
        private final Path mSelectionPath = new Path();
        private final RectF mSelectionBounds = new RectF();
        private final boolean mHasSelection;

        private int mHandleHeight;

        public TextActionModeCallback(boolean hasSelection) {
            mHasSelection = hasSelection;
            if (mHasSelection) {
                SelectionModifierCursorController selectionController = getSelectionController();
                if (selectionController.mStartHandle == null) {
                    // As these are for initializing selectionController, hide() must be called.
          
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值