一般都是ScrollView滑动然后包裹TabLayout+ViewPager+Fragment
在Fragment内包含 WebView、ListView、或者GridView之类的
1、设置ScrollView获取焦点:
mVideoScrollview.setFocusable(true); mVideoScrollview.setFocusableInTouchMode(true); mVideoScrollview.requestFocus();
2、设置ScrollView滑到顶部
//第一种:ScrollView有一个滑动到顶部的动作(一个动画); mVideoScrollview.fullScroll(ScrollView.FOCUS_UP); //第二种没有滑动动作直接到顶部 mVideoScrollview.scrollTo(0,0);
3、设置我的ScrollView中的GridView之类的不获取焦点:
mVideotwoLisview.setFocusable(false);
布局中:ScrollView的布局
android:focusable="true" android:focusableInTouchMode="true" android:descendantFocusability="beforeDescendants"
为什么要在布局和代码中两次设置呢。双重保险嘛~~只在布局或者只在代码中设置有时就会有问题
经过这两方面的设置,依然不能每次都实现所有目标,从其他fragment切换回来还是不能自动置顶(好,重点来啦!!敲黑板儿!!)
思路: 1.fragmennt的生命周期;项目中并不是使用ViewPager装载Fragment,只是在底部画了四个布局,点击切换Fragment,我在包含ScrollView的fragment里面将Fragment的生命周期全都打印出来,发现并没有走,最后还是问了别人,知道了一个fragment的方法
@Override
public void onHiddenChanged(boolean hidd) {
if(!hidd){//当fragment从隐藏到出现的时候
scrollView.scrollTo(0,0);
}
}
//从Activity回到包含ScrollView的fragment
//fragment的生命周期,我在重写了onResume()
@Override
public void onResume() {
super.onResume();
myScrollView.scrollTo(0,0);//从其他Activity回来,让ScrollView置顶
}
代码中,布局中,fragment的生命周期中(就是以上我写的所有的代码)设置完毕
本文详细介绍了如何通过代码和布局设置使Android应用中的ScrollView始终置顶显示。包括设置ScrollView及其内部组件的焦点属性、利用不同方法将ScrollView滚动到顶部的具体实现方式,以及在Fragment生命周期的不同阶段调用相应方法确保切换时ScrollView能自动回到顶部。

1304

被折叠的 条评论
为什么被折叠?



