gpt4 book ai didi

java - 如何在 Android Edittext 上选择拖动的文本?正如您在记事本、Word 等上所做的那样

转载 作者:行者123 更新时间:2023-12-02 09:59:03 25 4
gpt4 key购买 nike

我有一个带有编辑文本的应用程序,我在其中使用 vysor,它允许我从计算机控制我的手机。

我想要做的是,因为我在计算机上,所以我希望这个编辑文本在选择文本时像记事本或单词一样工作,通常使用鼠标。因为在 Android 上,您必须按 然后向右或向左选择文本。

可能吗?

最佳答案

拖动选择是可能的,但不是原生的,基本上,您必须自己为 EditText 实现一个 OnTouchListener 并检测向上/向下事件以查看从哪里开始并结束选择。以下是如何实现此类目标的基本示例:(未经测试,但想法应该很清晰)

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
}
};

关于java - 如何在 Android Edittext 上选择拖动的文本?正如您在记事本、Word 等上所做的那样,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55768615/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com