ScrollView 和 ListView ,GridView的嵌套问题
2016-08-04 10:10
246 查看
A.ScrollView 和 ListView ,GridView的嵌套时显示不全的问题。
这种情况可以重写ListView ,GridView,给其高度一个比较大的值。
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
/**
* 重写该方法,达到使ListView适应ScrollView的效果
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}B.解决完问题A你会发现还有其他奇葩的问题:切换界面时会出现无法定位到顶部或上次滑动停留的位置
解决方法:
(1)在activity或fragment适合的生命周期中(如onResume())调用:
mPullRefreshScrollView.setFocusableInTouchMode(true);
(2)也可以使用,不过这种情况在快速切换的情况下,会有点滑动的感觉。
scrollview.scrollTo(x,y);
scrollview.smoothScrollTo(0, 0);
//下面是用到PullToRefresh的时候
scrollview.getRefreshableView().scrollTo(0, 0);
scrollview.getRefreshableView().smoothScrollTo(0, 0);
这个方法定位到某一位置
(3)利用mPullRefreshScrollView.getRefreshableView();获取真正的的ScrollView
然后利用ScrollView.fullScroll(**);方法定位.
需要注意的是该方法不能直接在主线程中调用,否则无效,利用post方法间接调用
// 滑动至顶部
scrollView.post(new Runnable() {
public void run() {
scorllView.fullScroll(ScrollView.FOCUS_UP);
//scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
如果以上方法不行,在代码里去掉嵌套的listview的焦点 listView.setFocusable(false);
c.解决完以上问题,还有就是在组合使用时一般会隐藏显示一些view,哪就要重写ScrollView的滑动监听了。
这种情况可以重写ListView ,GridView,给其高度一个比较大的值。
public class MyListView extends ListView {
public MyListView(Context context) {
super(context);
}
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyListView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}
@Override
/**
* 重写该方法,达到使ListView适应ScrollView的效果
*/
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}B.解决完问题A你会发现还有其他奇葩的问题:切换界面时会出现无法定位到顶部或上次滑动停留的位置
解决方法:
(1)在activity或fragment适合的生命周期中(如onResume())调用:
mPullRefreshScrollView.setFocusableInTouchMode(true);
(2)也可以使用,不过这种情况在快速切换的情况下,会有点滑动的感觉。
scrollview.scrollTo(x,y);
scrollview.smoothScrollTo(0, 0);
//下面是用到PullToRefresh的时候
scrollview.getRefreshableView().scrollTo(0, 0);
scrollview.getRefreshableView().smoothScrollTo(0, 0);
这个方法定位到某一位置
(3)利用mPullRefreshScrollView.getRefreshableView();获取真正的的ScrollView
然后利用ScrollView.fullScroll(**);方法定位.
需要注意的是该方法不能直接在主线程中调用,否则无效,利用post方法间接调用
// 滑动至顶部
scrollView.post(new Runnable() {
public void run() {
scorllView.fullScroll(ScrollView.FOCUS_UP);
//scrollView.fullScroll(ScrollView.FOCUS_DOWN);
}
});
如果以上方法不行,在代码里去掉嵌套的listview的焦点 listView.setFocusable(false);
c.解决完以上问题,还有就是在组合使用时一般会隐藏显示一些view,哪就要重写ScrollView的滑动监听了。
public class MyScrollView extends ScrollView { private ScrollViewListener scrollViewListener = null; public MyScrollView(Context context) { super(context); } public MyScrollView(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onScrollChanged(int x, int y, int oldx, int oldy) { //x为当前滑动条的横坐标,y表示当前滑动条的纵坐标,oldx为前一次滑动的横坐标,oldy表示前一次滑动的纵坐标 super.onScrollChanged(x, y, oldx, oldy); if (scrollViewListener != null) { //在这里将方法暴露出去 scrollViewListener.onScrollChanged(this, x, y, oldx, oldy); } } //是否要其弹性滑动 @Override protected boolean overScrollBy(int deltaX, int deltaY, int scrollX, int scrollY, int scrollRangeX, int scrollRangeY, int maxOverScrollX, int maxOverScrollY, boolean isTouchEvent) { // 弹性滑动关键则是maxOverScrollX, 以及maxOverScrollY, // 一般默认值都是0,需要弹性时,更改其值即可 // 即就是,为零则不会发生弹性,不为零(>0,负数未测试)则会滑动到其值的位置 return super.overScrollBy(deltaX, deltaY, scrollX, scrollY, scrollRangeX, scrollRangeY, 0, 0, isTouchEvent); } //接口 public interface ScrollViewListener { void onScrollChanged(View scrollView, int x, int y, int oldx, int oldy); } public void setScrollViewListener(ScrollViewListener listener) { scrollViewListener=listener; } }
相关文章推荐
- ScrollView中嵌套GridView,Listview不显示全部item的问题
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- 解决ScrollView中listview、gridview的嵌套问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)
- [android] ScrollView 嵌套 ListView GridView问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题(冲突)
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- ScrollView嵌套ListView的问题同样适用于gridview
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- ScrollView嵌套ListView的问题同样适用于gridview
- android 关于 ScrollView嵌套GridView,ListView 显示和滑动的问题
- ScrollView中若嵌套有滑动的控件(如:WebView,ListView或GridView)时的焦点问题
- ScrollView中嵌套GridView,Listview不显示全部item的问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- ScrollView中若嵌套有滑动的控件(如:WebView,ListView或GridView),另外该界面中还有其它的控件时,界面不显示最上面控件的问题。
- 解决ScrollView下嵌套ListView、GridView显示不全的问题
- ScrollView嵌套ListView,GridView,ViewPager,以及这些控件自动滚动到底部问题的解决