最近项目中发现一个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的滚动
问题就这么简单的解决了。。。。。。。