首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Edittext Android上选择拖拽的文本?就像您在记事本、Word等上所做的那样

如何在Edittext Android上选择拖拽的文本?就像您在记事本、Word等上所做的那样
EN

Stack Overflow用户
提问于 2019-04-20 06:44:07
回答 1查看 201关注 0票数 0

我有一个带有编辑文本的应用程序,我正在使用vysor,它允许我从电脑上控制我的手机。

我想要做的是,既然我在电脑上,我希望这个编辑文本的工作方式类似于记事本或word,当涉及到选择文本时,通常使用鼠标。因为在Android上,你必须先按,然后向右或向左选择文本。

有可能吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-20 07:51:19

拖动选择是可能的,但不是原生的,基本上,您必须自己实现到EditTextOnTouchListener,并检测向上/向下事件以查看从哪里开始和结束选择。这里有一个基本的例子,说明如何实现这样的事情:(未经测试,但想法应该是清晰的)

代码语言:javascript
复制
EditText mText = ....
final int[] beginOffset = {-1};
View.OnTouchListener otl = new View.OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
       if(event.getToolType(0) == MotionEvent.TOOL_TYPE_MOUSE){//only change behavior for mouse
                int i = event.getAction();
                if (i == MotionEvent.ACTION_DOWN) {
                    Layout layout = ((EditText) v).getLayout();
                    float x = event.getX() + mText.getScrollX();
                    float y = event.getY() + mText.getScrollY();
                    int line = layout.getLineForVertical((int) y);                                  
                    int offset = layout.getOffsetForHorizontal(line, x);
                    if (offset > 0) {          
                        if (x > layout.getLineMax(0)){
                            beginOffset[0] = offset;//store beginning offset
                            mText.setSelection(offset); // touch was at end of text
                        }
                        else{
                            beginOffset[0] = offset - 1;//store beginning offset
                            mText.setSelection(offset - 1);
                        }
                    }

                } else if (i == MotionEvent.ACTION_UP) {
                    if (beginOffset[0] != -1) {//has previous down action
                        Layout layout = ((EditText) v).getLayout();
                        float x = event.getX() + mText.getScrollX();
                        float y = event.getY() + mText.getScrollY();  
                        int line = layout.getLineForVertical((int) y);                                            
                        int offset = layout.getOffsetForHorizontal(line, x);
                        if (offset > 0){
                            if (x > layout.getLineMax(0))
                                mText.setSelection(Math.min(offset, beginOffset[0]), Math.max(offset, beginOffset[0])); // touch was at end of text
                            else
                                mText.setSelection(Math.min(offset - 1, beginOffset[0]), Math.max(offset - 1, beginOffset[0]));
                        }
                        beginOffset[0] = 0;//clear beginning offset
                    }
                } else if (i == MotionEvent.ACTION_MOVE) { //selects as mouse moves
                    if (beginOffset[0] != -1) {//has previous down action
                        Layout layout = ((EditText) v).getLayout();
                        float x = event.getX() + mText.getScrollX();
                        float y = event.getY() + mText.getScrollY();
                        int line = layout.getLineForVertical((int) y);
                        int offset = layout.getOffsetForHorizontal(line, x);
                        if (offset > 0){
                            if (x > layout.getLineMax(0))
                                mText.setSelection(Math.min(offset, beginOffset[0]), Math.max(offset, beginOffset[0])); // touch was at end of text
                            else
                                mText.setSelection(Math.min(offset - 1, beginOffset[0]), Math.max(offset - 1, beginOffset[0]));
                        }
                    }
                }
                return true;
            }
            return false;//default behavior otherwise
        }
    };
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55768615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档