在Android开发中,ScrollView与ListView、GridView的嵌套使用经常都会用到,但是如果仅仅是纯粹的嵌套,ListView和GridView就会出现显示不全的情况,因为ScrollView和ListView、GridView自己都能滚动...一遇到这问题,马上能想到的方法就是在设置适配器后,手动去测量子控件高度,再重新设置ListView的高度。好吧,个人觉得这个方法略麻烦,其实还可以通过自定义控件去实现,以ListView为例,上代码~
package cn.yyh.oa.view;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* 自定义ListView,<span style="font-family: Arial, Helvetica, sans-serif;">解决ScrollView嵌套冲突问题</span>
*
* @author king
*
*/
public class NoScrollListView extends ListView {
public NoScrollListView(Context context) {
super(context);
}
public NoScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
/**
* 设置不滚动
*/
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
在布局中,把自定义ListView引入~
<span style="white-space:pre"> </span><cn.yyh.oa.view.NoScrollListView
android:id="@+id/lv_comments"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:divider="@null"
android:listSelector="@android:color/transparent" >
</cn.yyh.oa.view.NoScrollListView>
GridView也是同样的原理,重写onMeasure函数,这里就不再贴代码了。
但是,这个方法虽然简单,却也有一个弊端,就是ScrollView中,如果有其他的View,页面默认默认显示的首项是ListView,所以我们还得手动设置一下,把ScrollView移动到顶端。顺便说一句,相比起手动去测量子控件高度等其他方法,这个方法更好,因为它代码更少,同时保留了ListView的所有方法。
sv = (ScrollView) findViewById(R.id.sv);
sv.smoothScrollTo(0, 0);