0
私はアプリケーションのeditextボックスのタッチ時に、Ontouchの座標の助けを借りて文字の位置を取得したいと思います。これはどうすればよいのでしょうか? 助けてください ありがとうございましたeditextのonTouchで文字の位置を取得する方法
私はアプリケーションのeditextボックスのタッチ時に、Ontouchの座標の助けを借りて文字の位置を取得したいと思います。これはどうすればよいのでしょうか? 助けてください ありがとうございましたeditextのonTouchで文字の位置を取得する方法
私はちょうどそれを行う方法を書いています。これはTextView用ですが、TextViewを拡張しているので、EditTextで動作するはずです。カスタムEditTextを作成し、そこにこのメソッドをスティックします。
注 xおよびyは
public int getCharIndexFromCoordinate(int x, int y) {
// Offset the top padding
int height = getPaddingTop();
for (int i = 0; i < getLayout().getLineCount(); i++) {
Rect bounds = new Rect();
getLayout().getLineBounds(i, bounds);
height += bounds.height();
if (height >= y) {
int lineStart = getLayout().getLineStart(i);
int lineEnd = getLayout().getLineEnd(i);
Spanned span = (Spanned) getText();
RelativeSizeSpan[] sizeSpans = span.getSpans(lineStart, lineEnd, RelativeSizeSpan.class);
float scaleFactor = 1;
if (sizeSpans != null) {
for (int j = 0; j < sizeSpans.length; j++) {
scaleFactor = sizeSpans[j].getSizeChange();
}
}
String lineSpan = getText().subSequence(lineStart, lineEnd).toString();
float[] widths = new float[lineSpan.length()];
TextPaint paint = getPaint();
paint.getTextWidths(lineSpan, widths);
float width = 0;
for (int j = 0; j < lineSpan.length(); j++) {
width += widths[j] * scaleFactor;
if (width >= x || j == lineSpan.length() - 1) {
return lineStart + j;
}
}
}
}
return -1;
}
OnTouch
中のgetX()とgetY()表示MotionEventの成分であります