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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值