您的位置:首页 > 移动开发

Android-scrollview嵌套listview、webview、gridview不置顶问题

2017-07-17 15:25 507 查看
解决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();


参考:

Android问题:ScrollView默认位置不是最顶部最全解决方案
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐