Android-GridView与ScrollView共用的冲突问题(类似ListView)
2016-01-22 10:18
453 查看
》由于ListView,GridView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView,在ScrollView中嵌套使用ListView或者GridView,ListView只会显示一行多一点。两者进行嵌套,即会发生冲突。核心解决方案:重写ListView或者GridView的OnMesure方法。重写GridView方法,使其在绘制时重新计算GridView高度
---------------------
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
*
* @author 作者 :desaco
*
* @version 创建时间:2016-1-22 上午9:43:33
*
*/
public class CustomGridView extends GridView{
public CustomGridView(Context context) {
super(context);
}
public CustomGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGridView(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);
}
}
----------------------------------
public class MyGridView extends GridView {
private boolean haveScrollbar = true;
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/**
* 设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。 默认为 true
*
* @param haveScrollbars
*/
public void setHaveScrollbar(boolean haveScrollbar) {
this.haveScrollbar = haveScrollbar;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (haveScrollbars == false) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
------------------------
XML代码如下:
<cn.com.example.fang_com.beta_content.iwidgets.CustomGridView
android:id="@+id/common_show_workbenchs_gview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white_color"
android:listSelector="#00000000"
android:numColumns="2"
android:horizontalSpacing="1dp"
android:verticalSpacing="1dp"
android:scrollbars="none" />
---------------------------------
import android.content.Context;
import android.util.AttributeSet;
import android.view.View.MeasureSpec;
import android.widget.ListView;
public class TestListView extends ListView{
public TestListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public TestListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public TestListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
---------------------
import android.content.Context;
import android.util.AttributeSet;
import android.widget.GridView;
/**
*
* @author 作者 :desaco
*
* @version 创建时间:2016-1-22 上午9:43:33
*
*/
public class CustomGridView extends GridView{
public CustomGridView(Context context) {
super(context);
}
public CustomGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomGridView(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);
}
}
----------------------------------
public class MyGridView extends GridView {
private boolean haveScrollbar = true;
public MyGridView(Context context) {
super(context);
}
public MyGridView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyGridView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
/**
* 设置是否有ScrollBar,当要在ScollView中显示时,应当设置为false。 默认为 true
*
* @param haveScrollbars
*/
public void setHaveScrollbar(boolean haveScrollbar) {
this.haveScrollbar = haveScrollbar;
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
if (haveScrollbars == false) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
} else {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
}
------------------------
XML代码如下:
<cn.com.example.fang_com.beta_content.iwidgets.CustomGridView
android:id="@+id/common_show_workbenchs_gview"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white_color"
android:listSelector="#00000000"
android:numColumns="2"
android:horizontalSpacing="1dp"
android:verticalSpacing="1dp"
android:scrollbars="none" />
---------------------------------
import android.content.Context;
import android.util.AttributeSet;
import android.view.View.MeasureSpec;
import android.widget.ListView;
public class TestListView extends ListView{
public TestListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
public TestListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public TestListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
// TODO Auto-generated method stub
int expandSpec = MeasureSpec.makeMeasureSpec(
Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
相关文章推荐
- Android手机 Fildder真机抓包
- Android alertdialog实现确认退出
- Android学习笔记(九)——更复杂的进度对话框
- android studio新项目时提示:Plugin is too old, please update to a more recent version
- Android 打开word,excel,ppt,txt,html等文件有用户选择用何种手机上面已经安装有的工具打开
- Android mainifest 中设置横竖屏
- Android开发笔记--屏蔽返回键,home键以及其他实体按键
- 如何处理Android Studio 上面关于 update 和 commit 小箭头的消失
- Android开发笔记--Back键 生命周期
- android studio for mac Cannot run program Permission denied
- Android开发笔记--捕获Home键
- android 虚拟导航挡住应用底部解决方案(屏幕底部的三个按键)
- Android View刷新机制
- Android开发笔记--调用短信,电话,E-Mail,浏览器
- Android开发笔记--制作启动界面splash
- Android开发笔记--Dialog提示框
- Android开发笔记--操纵字符串中的字符
- Android开发笔记--按钮添加事件的四种方法
- Android开发笔记--隐藏按钮
- Android 瘦身攻略