Aru*_*ole 141 java android scrollview android-scrollview
有没有办法以ScrollView编程方式滚动到某个位置?
我创建了动态TableLayout,放在一个ScrollView.所以我希望在特定的操作(如点击按钮等)上,特定的行应自动滚动到顶部位置.
可能吗?
erc*_*rcu 198
Pragna的答案总是不起作用,试试这个:
mScrollView.post(new Runnable() {
public void run() {
mScrollView.scrollTo(0, mScrollView.getBottom());
}
});
Run Code Online (Sandbox Code Playgroud)
要么
mScrollView.post(new Runnable() {
public void run() {
mScrollView.fullScroll(mScrollView.FOCUS_DOWN);
}
});
Run Code Online (Sandbox Code Playgroud)
如果你想滚动开始
mScrollView.post(new Runnable() {
public void run() {
mScrollView.fullScroll(mScrollView.FOCUS_UP);
}
});
Run Code Online (Sandbox Code Playgroud)
And*_*oid 158
ScrollView sv = (ScrollView)findViewById(R.id.scrl);
sv.scrollTo(0, sv.getBottom());
Run Code Online (Sandbox Code Playgroud)
要么
sv.scrollTo(5, 10);
pat*_*ckf 34
我希望scrollView在onCreateView()之后直接滚动(不是在点击按钮之后).为了使它工作,我需要使用ViewTreeObserver:
mScrollView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
mScrollView.post(new Runnable() {
public void run() {
mScrollView.fullScroll(View.FOCUS_DOWN);
}
});
}
});
Run Code Online (Sandbox Code Playgroud)
但请注意,每次调度时都会调用它(例如,如果将视图设置为不可见或相似),所以如果您不再需要它,请不要忘记删除此侦听器:
public void removeGlobalOnLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim) 在SDK Lvl <16
要么
public void removeOnGlobalLayoutListener (ViewTreeObserver.OnGlobalLayoutListener victim) 在SDK Lvl> = 16
Mat*_*ero 20
这里有很多好的答案,但我只想补充一点.有时您希望将ScrollView滚动到布局的特定视图,而不是滚动到顶部或底部.
一个简单的例子:在注册表单中,如果用户在未填写表单的编辑文本时点击"注册"按钮,则需要滚动到该特定编辑文本以告知用户他必须填写该字段.
在这种情况下,你可以这样做:
scrollView.post(new Runnable() {
public void run() {
scrollView.scrollTo(0, editText.getBottom());
}
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要平滑滚动而不是即时滚动:
scrollView.post(new Runnable() {
public void run() {
scrollView.smoothScrollTo(0, editText.getBottom());
}
});
Run Code Online (Sandbox Code Playgroud)
显然,您可以使用任何类型的视图而不是编辑文本.请注意,getBottom()根据其父布局返回视图的坐标,因此ScrollView中使用的所有视图应仅具有父级(例如,线性布局).
如果您在ScrollView的子项中有多个父项,我找到的唯一解决方案是在父视图上调用requestChildFocus:
editText.getParent().requestChildFocus(editText, editText);
Run Code Online (Sandbox Code Playgroud)
但在这种情况下,你不能有一个平滑的滚动.
我希望这个答案可以帮助有同样问题的人.
Sri*_*lla 19
使用这样的东西:
mScrollView.scrollBy(10, 10);
Run Code Online (Sandbox Code Playgroud)
要么
mScrollView.scrollTo(10, 10);
Run Code Online (Sandbox Code Playgroud)
如果您想立即滚动,那么您可以使用:
ScrollView scroll= (ScrollView)findViewById(R.id.scroll);
scroll.scrollTo(0, scroll.getBottom());
OR
scroll.fullScroll(View.FOCUS_DOWN);
OR
scroll.post(new Runnable() {
@Override
public void run() {
scroll.fullScroll(View.FOCUS_DOWN);
}
});
Run Code Online (Sandbox Code Playgroud)
或者,如果您想要平滑且缓慢地滚动,那么您可以使用:
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();
}
Run Code Online (Sandbox Code Playgroud)
小智 5
**向上滚动到所需的高度。我想出了一些很好的解决方案**
scrollView.postDelayed(new Runnable() {
@Override
public void run() {
scrollView.scrollBy(0, childView.getHeight());
}
}, 100);
Run Code Online (Sandbox Code Playgroud)
是的你可以。
假设你有一个Layout,在里面,你有很多Views。所以如果你想滚动到任何View编程,你必须编写以下代码片段:
例如:
content_main.xml
<ScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<TextView
android:id="@+id/txtView"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)
主活动.java
ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView);
Button btn = (Button) findViewById(R.id.ivEventBanner);
TextView txtView = (TextView) findViewById(R.id.ivEditBannerImage);
Run Code Online (Sandbox Code Playgroud)
如果你想滚动到一个特定的View,比方说txtview,在这种情况下,只需写:
scrollView.smoothScrollTo(txtView.getScrollX(),txtView.getScrollY());
Run Code Online (Sandbox Code Playgroud)
你已经完成了。
| 归档时间: |
|
| 查看次数: |
154947 次 |
| 最近记录: |