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

来源:互联网 发布:js闪动文字 编辑:程序博客网 时间:2024/06/13 08:36

解决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默认位置不是最顶部最全解决方案

阅读全文
0 0
原创粉丝点击