鉴于EditText
及其OnTouch
事件,我重写了它,并返回true。这可以防止软键出现。但它也可以防止内部计算EditText
内部的位置指数。也就是说myEditText.getSelectionStart()
将返回总是0MotionEvent在EditText中的位置索引
有没有一种方法来计算(或Android功能,可以计算)的基础上OnTouch
事件的MotionEvent
参数的位置索引?
谢谢。
鉴于EditText
及其OnTouch
事件,我重写了它,并返回true。这可以防止软键出现。但它也可以防止内部计算EditText
内部的位置指数。也就是说myEditText.getSelectionStart()
将返回总是0MotionEvent在EditText中的位置索引
有没有一种方法来计算(或Android功能,可以计算)的基础上OnTouch
事件的MotionEvent
参数的位置索引?
谢谢。
经过搜索和谷歌搜索后,我明白解决方案并不清楚。 所以我通过妥协解决了它。
我在我的键盘上提供用户可以移动光标的右/左箭头。 如果用户在显示键盘时点击编辑文本,他将得到一个Toast,告诉他使用键盘来做他想做的事情。
我意识到这个问题已经有一年了,但我目前正在尝试做同样的事情。我的理由是,我需要一个很好的解决方案来处理本地化数字DecimalEditText输入,Android本身并不能很好地执行:http://code.google.com/p/android/issues/detail?id=2626并且所有试图解决该问题的线程都无法在三星等制造商采用“数字”参数。
这不是用于将字段中的onTouch事件转换为光标位置的最终代码,但是我刚刚在半小时前开始,所以这里是我在R & D中的位置。
它的工作很少。我只需要弄清楚如何计算不同屏幕的除数参数。 16的值适用于我的小型旧手机,但不适用于密度更高的7英寸平板电脑。
[编辑:在我测试过的设备上运行良好。结论还为时过早,如果更多的设备也是如此。]
myField.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent me) {
if (me.getAction() == MotionEvent.ACTION_DOWN) {
try {
float dp = App.get().getResources().getDisplayMetrics().density;
int div = (int) (10 * dp);
int x = (int) me.getX();
int pos = (v.getWidth() - x)/div;
int strlen = ((EditText)v).getText().toString().length();
int curpos = strlen - pos;
v.requestFocus();
if (curpos < 0) {
((EditText)v).setSelection(0);
} else {
((EditText)v).setSelection(curpos);
}
} catch (Exception e) {
Log.w(App.TAG, "onTouch exception " + e.toString());
}
}
return true;
}
});
您可以使用'(int)((EditText)v).getPaint()。measureText(“0”)'来确定符号长度,如果View是EditText – wingear 2017-05-18 14:51:04
有一个在Android的API的今天呼吁getOffsetForPosition(浮法X,浮法Y),因为API 14级的解决方案,以获得字符位置,触摸是在edittext上制作的。它基本上是你可以从里面你的听众为如下的EditText(的onClick或onTouch)的一个调用的方法:
int click_position = <your_edittext>.getOffsetForPosition(event.getX(), event.getY());
,其中事件是MotionEvent传递到听者。 这给出了在该触摸被做了的EditText视图中的字符的位置,使用哪一个可以使用
edittext.setSelection(click_position);
定位光标但是,如果你希望它是采用Android版本较早的设备上工作比4.0(ICS)(API等级13或更低),此API不可用。但是,您可以使用其他可用的API(这实质上是Google从API级别14执行的操作)为14以下的API版本开发自己的方法。 我做到了这一点,并能够成功地从motionevent获得编辑文本上的位置索引。我基本上编译了一个具有相同名称的静态方法,来自API中的其他API调用。我不确定是否需要现在发布旧API级别的代码。如果有兴趣,我会在这里发布代码。
你能否更广泛地描述你想要达到的目标?我有一个软键盘设备,所以我不能发誓,但我怀疑一个硬键盘设备会弹出一个软 - 因此,我想你试图阻止一个软键盘设备弹出它......但有什么用处是EditText如果用户不能输入它?也许另一个小部件可能更有用?因此,为什么你更好地对你的想法给予更广泛的看法。最好的祝福。 – pouzzler 2012-04-22 10:15:00
嗨,@pouzzler,我的确想要防止软性kesy出现,而是显示我自己的键,这些键很少,并且包含某些字符(大约12个特定键)。我可以模仿软键没有问题,除了触摸设置光标位置。 – 2012-04-22 10:59:33