最近项目中发现一个scrollview的小问题,当scrollview里面子控件高端变化后,scrollview滑动,显示底部。这样用户体验就不是太好。
当遇到这个问题的时候,我想记录下原始的位置,然后当子view的高度变化的时候,让他滑到原来的位置就可以了。于是我复写Scollview,想要获得滑动的位置:
public class ObserveScrollView extends ScrollView {
private ScrollListener mListener;
public static interface ScrollListener {
public void scrollOritention(int l, int t, int oldl, int oldt);
}
public ObserveScrollView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
public ObserveScrollView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ObserveScrollView(Context context) {
super(context);
}
@Override
protected void onScrollChanged(int l, int t, int oldl, int oldt) {
super.onScrollChanged(l, t, oldl, oldt);
if (mListener != null)
mListener.scrollOritention(l, t, oldl, oldt);
}
public void setScrollListener(ScrollListener l) {
this.mListener = l;
}
}
结果发现很复杂,能不能实现都是问题,于是重新找资料发现一个很好的解决方案:
在ScrollView下对应的LinearLayout中加入
Android:focusable="true"
android:focusableInTouchMode="true"
将焦点给LinearLayout就不会因为内部控件的改变而导致ScrollView的滚动
问题就这么简单的解决了。。。。。。。