我不知道如何去做这件事,但我想知道是否有一种方法来获取在TextView中的字符串中的位置(索引),当一个人点击TextView中。所以,如果有人点击下面的TextView:OnClick在TextView中的字符串中的位置
Hello I'm Vinay Hiremath.
第一“H”,onClick事件会得到整数0或者,如果有人点击了“V”,它将获得10和等等。
任何帮助,像往常一样,非常感谢。随意称我为白痴,并投掷石块,如果这是公然在Android Developers。
我不知道如何去做这件事,但我想知道是否有一种方法来获取在TextView中的字符串中的位置(索引),当一个人点击TextView中。所以,如果有人点击下面的TextView:OnClick在TextView中的字符串中的位置
Hello I'm Vinay Hiremath.
第一“H”,onClick事件会得到整数0或者,如果有人点击了“V”,它将获得10和等等。
任何帮助,像往常一样,非常感谢。随意称我为白痴,并投掷石块,如果这是公然在Android Developers。
所以我最终通过詹姆斯摩尔的评论here中的链接解决了这个问题。我最终在该链接中使用了Tony Blues的解决方案。解决方案是这样的:
1.)将onTouchListener设置为TextView。
2.)获取TextView的布局。
3.)通过事件获取触摸的x,y坐标。
4.)根据该事件查找线和偏移(索引)。
下面的代码示例是一个如何将日志(在详细)给出一个TextView名为MANIP触摸的指标:
manip.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Layout layout = ((TextView) v).getLayout();
int x = (int)event.getX();
int y = (int)event.getY();
if (layout!=null){
int line = layout.getLineForVertical(y);
int offset = layout.getOffsetForHorizontal(line, x);
Log.v("index", ""+offset);
}
return true;
}
});
编辑:拉胡尔Mandaliya已经把它带到我的注意,该代码将失败如果在文本视图中有填充。不幸的是,自从我编写了任何Android代码以来,这已经很长时间了,所以我不知道如何更新这个答案来解决这个问题。直观地说,如果你知道填充值,你似乎可以对点击事件进行某种检查。对不起,对这个边缘案例无法提供更多帮助。 :-(
这只适用于textivew的布局宽度和高度是包装内容的情况。如果你使宽度或高度填充父母,然后选择其他偏移 – 2015-05-28 12:18:31
@RahulMandaliya选择哪个偏移量?我会更新我的回答 - 从我完成任何Android事情开始,这已经很长时间了。 :-P – Vinay 2015-05-28 18:23:32
只需在你的textview中添加填充,然后点击外部文本 你必须添加textview的条件,如if(offset <= text.length()) 然后它的工作 – 2015-05-28 19:12:34
带一点盐,因为我没有机会测试它。
设置android:textIsSelectable
属性true
为TextView
然后使用getSelectionStart()
和getSelectionEnd()
方法。
再次,我真的只是一个受过教育的猜测。
谢谢你为伟大的方向Octavian!这实际上对我未来在我的应用中的功能非常有用,如果它有效的话。但是,只要我将“android:textIsSelectable =”true“”放入我的XML布局中,就会告诉我“在'android'包'中找不到属性'textIsSelectable'的资源标识符。你有什么想法这可能意味着什么?它看起来像有人在这里面临同样的问题:http://androidforums.com/application-development/330162-how-do-i-make-textview-text-selectable.html但没有得到答案。任何帮助表示赞赏。 – Vinay 2011-06-10 02:47:58
作为一个便笺,我明白这个问题是关于完全不同的东西,所以,一旦我找出整个“textIsSelectable”问题,是否可以帮助我,如果你的答案有效,我会给你信用和标记它作为这个问题的答案。我总是在应有的地方给予奖励。 – Vinay 2011-06-10 02:49:50
哦。看来这个问题是由于我没有告诉你方法'isTextSelectable()'来自API级别'11'(蜂窝)。我不确定它是否工作。我必须亲自尝试。 – 2011-06-10 10:01:33
1)取一个列表。
2)将此字符串拆分为单独的字符。
3)取setOnItemClickListener(new OnItemClickListener())事件。
4)通过charcter的get args显示每个字符的Toast。
它会帮助你。
如果Octavian的答案适用于我,那么我会使用它(它可以更好地满足我的需求),但+1可以用于解决此问题的创意/不同方式。 ;-) – Vinay 2011-06-10 02:50:45
如果按照接受的答案,您可能会注意到,每当用户触摸屏幕时,该事件都会不止一次地发生,请使用event.getAction()
来找出正在处理的操作。例如,对于屏幕上的简单触摸,onTouch
事件将使用ACTION_DOWN
和ACTION_UP
动作触发两次。对于触摸和移动,您将根据移动(在控制范围内,从外部到内部或反之亦然)获得不同的操作。有关更多详细信息,请检查MotionEvent。
下面的代码被接受的答案的修改版本,仅处理ACTION_DOWN
行动:
manip.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
Layout layout = ((TextView) v).getLayout();
int x = (int)event.getX();
int y = (int)event.getY();
if (layout!=null){
int line = layout.getLineForVertical(y);
int offset = layout.getOffsetForHorizontal(line, x);
Log.v("index", ""+offset);
}
}
return true;
}
});
Upvote from me。在这一点上,我已经触摸了与Android有关的任何东西已经有一段时间了,但这似乎是有道理的。 :-) – Vinay 2014-02-24 22:00:09
看起来你问http://stackoverflow.com/questions/2302867/android-how- to-determine-character-index-of-a-touch-events-position-in-textview – 2011-07-01 21:01:28