ScrollView中嵌套的viewPager,viepager高度设置为wrap_content时内容不显示问题以及与scrollview冲突的解决方案
2015-06-19 10:05
549 查看
1、高度问题的解决,可以通过获取其子控件的高度来动态设置,在自定义的viewpager中重写onMeasure方法
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
for(int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if(h > height) height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
这样重写,就可以将viewpager的高度设置为其多个子控件的最大高度的子控件的高度。
2、防止与scrollview的冲突,可以通过重写 dispatchTouchEvent方法来解决
// 防止viewpager跟scrollview冲突
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean ret = super.dispatchTouchEvent(ev);
if(ret)
{
requestDisallowInterceptTouchEvent(true);
}
return ret;
}
我在scrollview中嵌套了viewpager,通过上述方法,现在已经解决一些问题。
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int height = 0;
for(int i = 0; i < getChildCount(); i++) {
View child = getChildAt(i);
child.measure(widthMeasureSpec, MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED));
int h = child.getMeasuredHeight();
if(h > height) height = h;
}
heightMeasureSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
这样重写,就可以将viewpager的高度设置为其多个子控件的最大高度的子控件的高度。
2、防止与scrollview的冲突,可以通过重写 dispatchTouchEvent方法来解决
// 防止viewpager跟scrollview冲突
@Override
public boolean dispatchTouchEvent(MotionEvent ev)
{
boolean ret = super.dispatchTouchEvent(ev);
if(ret)
{
requestDisallowInterceptTouchEvent(true);
}
return ret;
}
我在scrollview中嵌套了viewpager,通过上述方法,现在已经解决一些问题。
相关文章推荐
- Theano2.1.15-基础知识之theano如何处理shapre信息
- Node.js学习--基础知识(9)--HTTP客户端
- ffmpeg学习笔记目录
- MobaSSH SSH server for Windows - Download Home Edition
- 脚本语言精粹
- Theano2.1.15-基础知识之theano如何处理shapre信息
- 杜月笙语录
- ProgressDialog中的Context注意事项
- Android Bundle类别
- c#语言实现对电脑文件夹的批量改名,选定改名
- 使用text-shadow实现文字特效
- Linux read系统调用
- linux常用命令
- 枚举
- JAVA堆与栈
- AutoCAD .NET二次开发(三)
- Calendar JAVA中用来计算时间差, 两个时间差, 多个时间差.
- VCenter 5.5 数据库过大造成的问题和解决方法
- linux下代码调试
- linux 中网络设备的那些事 bridge TAP Veth Vlan br