在android开发中,遇到ScrollView嵌套ListView和GridView或者嵌套ListView与ListView时,会出现ListView、GridView不能滚动时情景,这时候我们就需要自定义ListView和GridView。
自定义ListView
package com.example.fox_pipaw;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;
/**
* Created by 张样 on 2016/10/25.
*/
public class CustomListView extends ListView{
public CustomListView(Context context) {
this(context,null);
}
public CustomListView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
/**
* 重写该方法、使ListView能在所有可以滚动的视图中使用,比如ListView嵌套ListView,
* 或者ScrollView嵌套ListView
*/
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
自定义GridView
package com.example.fox_pipaw;
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
* Created by 张样 on 2016/10/24.
*/
public class CustomGridView extends GridView {
public CustomGridView(Context context) {
this(context,null);
}
public CustomGridView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public CustomGridView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
/**
* 重写该方法、使ListView能在所有可以滚动的视图中使用,比如ListView嵌套GridView,或
* 者ScrollView嵌套GridView
*/
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
在xml文件中的使用示例
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.example.fox_pipaw.CustomListView
android:id="@+id/game_sort_list"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="今天首发"
android:textSize="20sp"/>
<com.example.fox_pipaw.CustomListView
android:id="@+id/game_today_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="热门推荐"
android:textSize="20sp"/>
<com.example.fox_pipaw.CustomListView
android:id="@+id/game_hot_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="精选游戏"
android:textSize="20sp"/>
<com.example.fox_pipaw.CustomGridView
android:id="@+id/game_select_gv"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:numColumns="2"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="游戏福利"
android:textSize="20sp"/>
<com.example.fox_pipaw.CustomListView
android:id="@+id/game_welfare_lv"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
</ScrollView>