ScrollView를 맨 처음부터 시작하고 싶습니다. 어떤 방법이 있습니까?
답변
scroll.fullScroll(View.FOCUS_DOWN)
또한 작동해야합니다.
이것을 넣어 scroll.Post(Runnable run)
코 틀린 코드
scrollView.post {
scrollView.fullScroll(View.FOCUS_DOWN)
}
답변
다음과 같이 scroll.post 내부에서 코드를 실행해야합니다.
scroll.post(new Runnable() {
@Override
public void run() {
scroll.fullScroll(View.FOCUS_DOWN);
}
});
답변
scroll.fullScroll(View.FOCUS_DOWN)
초점의 변화로 이어질 것입니다. 두 개의 EditText와 같이 둘 이상의 포커스 가능한 뷰가있는 경우 이상한 동작이 발생합니다. 이 질문에는 다른 방법이 있습니다.
View lastChild = scrollLayout.getChildAt(scrollLayout.getChildCount() - 1);
int bottom = lastChild.getBottom() + scrollLayout.getPaddingBottom();
int sy = scrollLayout.getScrollY();
int sh = scrollLayout.getHeight();
int delta = bottom - (sy + sh);
scrollLayout.smoothScrollBy(0, delta);
이것은 잘 작동합니다.
코 틀린 확장
fun ScrollView.scrollToBottom() {
val lastChild = getChildAt(childCount - 1)
val bottom = lastChild.bottom + paddingBottom
val delta = bottom - (scrollY+ height)
smoothScrollBy(0, delta)
}
답변
때때로 scrollView.post가 작동하지 않습니다
scrollView.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
그러나 scrollView.postDelayed를 사용하면 확실히 작동합니다.
scrollView.postDelayed(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
},1000);
답변
나에게 가장 효과가 있었던 것은
scroll_view.post(new Runnable() {
@Override
public void run() {
// This method works but animates the scrolling
// which looks weird on first load
// scroll_view.fullScroll(View.FOCUS_DOWN);
// This method works even better because there are no animations.
scroll_view.scrollTo(0, scroll_view.getBottom());
}
});
답변
나는 완벽하게 작동하도록 증분합니다.
private void sendScroll(){
final Handler handler = new Handler();
new Thread(new Runnable() {
@Override
public void run() {
try {Thread.sleep(100);} catch (InterruptedException e) {}
handler.post(new Runnable() {
@Override
public void run() {
scrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
}).start();
}
노트
이 답변은 이전 버전의 Android에 대한 해결 방법입니다. 오늘날 postDelayed
에는 더 이상 버그가 없으므로 사용해야합니다.
답변
나는 그것을 성공적으로 시도했다.
scrollView.postDelayed(new Runnable() {
@Override
public void run() {
scrollView.smoothScrollTo(0, scrollView.getHeight());
}
}, 1000);