コードの入力には大文字のEditText
が使用されています。水平方向に(HorizontalScrollView
に意図的に入れ子になって)スクロールし、ページの残りの部分と一緒に垂直方向にスクロールしてScrollView
にすることができます。すなわち上にそれをスクロールし、今私は、任意のエラーに集中したいEditTextの範囲をプログラム的にスクロールして表示します
Editable text = mConfig.getText();
for (OverlayValidator.ValidationError error : errors) {
text.setSpan(
new BackgroundColorSpan(error.isCritical ? 0x40FF0000 : 0x40FF8800),
error.errorStart, error.errorEnd,
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_INTERMEDIATE
);
}
:ユーザーはプレビューや保存を押すと、コードが検証され、エラーは、このようなBackgroundColorSpans
を使用して強調表示されます:私はまた、機能性を強調し、エラーを持っています現在スクリーンから外れている場合は画面に表示されます。 StackOverflowの上で、このために広く提案された解決策は、所望の範囲の選択を強制することである。
Selection.setSelection(mConfig.getText(), errors.get(0).errorStart, errors.get(0).errorEnd);
それが強調表示され、スズにしたので、これは確かに、しかし、ビュー(video here)に自身を動作し、範囲スクロールこの範囲は望ましくない。
私はこの
Selection.setSelection(mConfig.getText(), errors.get(0).errorEnd);
のように、カーソルを配置する唯一の位置を指定することで選択を回避することができますが、これは唯一のカーソルが画面に入っていることを確認し、範囲の残りの部分が残ることがありオフスクリーン(another video)。
Selection.setSelection(mConfig.getText(), errors.get(0).errorStart, errors.get(0).errorEnd);
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
Selection.setSelection(mConfig.getText(), errors.get(0).errorEnd);
}
});
基本的に私は、実際の選択なし(ビューにスクロール)Selection
の副作用が必要になります。私はこのようにそれらを呼び出す場合でも、効果を取るだけで、最後の選択コマンドで両方の結果を呼び出そうと
。
コードを調べて、選択した範囲がどのように画面に表示されるのか理解しようとしましたが、コードが絡みすぎていました(スパン、ウォッチャーなど)。ドキュメントから私は方法View.requestRectangleOnScreen(Rect)
に遭遇しましたが、どのようにスクロールするために矩形を得るのですか? (私はいつもTextPaint
を受け取り、自分自身で文字を測定することができましたが、より良い方法が必要です!)
ありがとう。