Vin*_*nay 15 indexing android onclick textview
我不知道该怎么做,但我想知道当一个人点击TextView上的某个地方时,是否有办法在TextView中的String中获取位置(索引).因此,如果有人点击以下TextView:
Hello I'm Vinay Hiremath.
Run Code Online (Sandbox Code Playgroud)
在第一个'H'上,onClick事件将获得整数0.或者,如果有人点击'V',它将获得10,依此类推.
任何帮助,像往常一样,非常感谢.如果在Android开发者身上公然露面,请随意称我为白痴并扔石头.
Vin*_*nay 23
所以,我最终经由詹姆斯·穆尔的评论链接解决这一这里.我最终在该链接中使用了Tony Blues的解决方案.那解决方案是这样的:
1.)将onTouchListener设置为TextView.
2.)获取TextView的布局.
3.)通过事件获取触摸的x,y坐标.
4.)根据该事件查找线和偏移量(索引).
下面的代码示例是如何在给定名为manip的TextView的情况下记录(详细)触摸的索引:
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;
}
});
Run Code Online (Sandbox Code Playgroud)
编辑:Rahul Mandaliya提请我注意,如果文本视图中有填充,此代码将失败.不幸的是,自从我编写任何Android代码以来已经很长时间了,所以我不知道如何更新这个答案来解释这个问题.直观地说,如果您知道填充值,似乎可以对click事件进行某种检查.很抱歉在这个边缘案例中无法提供更多帮助.:-(
Rac*_*lan 11
如果您正在按照接受的答案进行操作,您可能会注意到onTouch
每次用户触摸屏幕时都会多次引发该事件.使用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;
}
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
7901 次 |
最近记录: |