۱۳۹۴/۰۳/۱۴, ۰۳:۳۹ ب.ظ
دوست عزیز به نظرمن یکی از راه حلهایی که میتونه به شما کمک کنه.
اینه که ابتدا یک شی Scroll توی فایل جاوا بسازید و متن طولانیتون رو بهش پاس بدید.حالا میتونید از دو متد SetScrollSpot (برای ست کردن پوزیشن هنگام نمایش تکست ویو که باید در متد oncreate صدا بزنید)
و از متدgetScrollSpot (برای ذخیره کردن پوزیشن آخرین اسکرول که این متد رو باید هنگام ازبین رفتن اکتیویتی صدا بزنید.بدنه این دومتد هم در زیر اومده (زیاد با ساختار بدنه کلنجار نرید، و احتیاجی نیست. فقط بدونید متد get براساس پوزیشن scroll یه مقدار float بر میگردونه).این روش بالا میتونه تاحدی بهتون کمک کنه..روشهایی دیگه هم هست که روشهای دیگه یا پیچیده تر هستند یا باگهای خاص خودش داره..میتونید روشهای دیگه رو در سایت StackOverflow پیدا کنید.
اینه که ابتدا یک شی Scroll توی فایل جاوا بسازید و متن طولانیتون رو بهش پاس بدید.
کد پیاچپی:
ScrollView scrollView;
float scrollSpot;
protected void onCreate(Bundle savedInstanceState) {
textView.setText("my text is long...");
scrollView = new ScrollView(this);
scrollView.addView(textView);
}
کد پیاچپی:
scrollView.post(new Runnable() {
public void run() {
setScrollSpot(scrollSpot);
}
});
و از متدgetScrollSpot (برای ذخیره کردن پوزیشن آخرین اسکرول که این متد رو باید هنگام ازبین رفتن اکتیویتی صدا بزنید.
کد پیاچپی:
protected void onDestroy() {
scrollSpot = getScrollSpot();
}
کد پیاچپی:
private float getScrollSpot() {
int y = scrollView.getScrollY();
Layout layout = textView.getLayout();
int topPadding = -layout.getTopPadding();
if (y <= topPadding) {
return (float) (topPadding - y) / textView.getLineHeight();
}
int line = layout.getLineForVertical(y - 1) + 1;
int offset = layout.getLineStart(line);
int above = layout.getLineTop(line) - y;
return offset + (float) above / textView.getLineHeight();
}
private void setScrollSpot(float spot) {
int offset = (int) spot;
int above = (int) ((spot - offset) * textView.getLineHeight());
Layout layout = textView.getLayout();
int line = layout.getLineForOffset(offset);
int y = (line == 0 ? -layout.getTopPadding() : layout.getLineTop(line))
- above;
scrollView.scrollTo(0, y);
}