TabLayout切换标题栏被顶上去的处理

一般都是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的生命周期中(就是以上我写的所有的代码)设置完毕

猜你喜欢

转载自my.oschina.net/u/3698786/blog/1810657