解决 listView gridView 与ScrollView嵌套时的冲突

时间:2023-03-10 02:06:09
解决  listView  gridView  与ScrollView嵌套时的冲突
 package com.xqx.fight;

 import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.widget.ArrayAdapter;
import android.widget.ListView; public class MainActivity extends Activity { private ListView listView;
private ArrayAdapter<String > adapter; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); listView = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
for(int i=0;i<20;i++)
{
adapter.add("列表项:"+i);
}
listView.setAdapter(adapter); listView.setOnTouchListener(new OnTouchListener() { @Override
public boolean onTouch(View v, MotionEvent event) {
//getParent().requestDisallowInterceptTouchEvent(true) 不允许父层拦截或干扰本控件
listView.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
} } MainActivity.class

MainActivity

滑动listView的时候可以滑动   滑动listView之外时整个屏幕会滑

所有的View都有一个onMeasure()方法实际测量自己尺寸的方法

当listView被scrollView包含的时候 onMeasure接收的参数就有些不同
普通情况wrapContent会对应一个参数模式 称作AT_MOST
普通情况 match_parent对应EXACTLY
ScrollView内部的控件 进行尺寸的计算 onMeasure的参数模式是UNSPECIFIED

listView onMeasure方法检测模式是UNSPECIFIED 永远是一行

遇到ScrollView嵌套listView、gridView的时候 会出现页面没有显示ScrollView顶部的现象  这时候  需要将ScrollView里边的最顶部的根布局加入

 android:focusable="true"
android:focusableInTouchMode="true"

让根布局获取焦点就可以了

ScrollView嵌套RecyclerView的时候,RecyclerView的列表条目显示不全

尝试了很多方法后最终的解决方法是将ScrollView替换成<android.support.v4.widget.NestedScrollView>问题就都解决了