解决scrollview嵌套listview、gridview滑动冲突常见方式:
package com.jukopro.titlebarcolor;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
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
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
但是有时候会发现,如果listview上面还有其他布局,比如:TextView,可能会发现进入界面后,看不到TextView,
为了解决scrollview和listview冲突 设置了listview的高度 , 结果进页面就不是在顶部了 。
原因:
1、在Activity计算窗口的高度时,是在listview没有填充数据时候就完成的,由于ScrollView嵌套listview时没有指定高度,所以ScrollView就会按照layout中定义的默认高度计算。
2、因为listview获取了焦点。
解决方式:
1、设置滚动
sv_container.smoothScrollTo(0,0);
注意:需在listview数据加载完成后调用。
2、 在代码里去掉listview的焦点(推荐)
lv.setFocusable(false);
3、Listview外套一层LinearLayout
4、跟EditText一样,在父元素的属性下面,加上这两行即可
android:focusableInTouchMode=”true”
android:focusable=”true”
5、最开始的时候让最上面其中一个控件获得焦点,滚动条自然就到顶部去了,如下:
txtBaseMsg.setFocusable(true);
txtBaseMsg.setFocusableInTouchMode(true);
txtBaseMsg.requestFocus();