Android之ScrollView嵌套ListView和GridView沖突的解決方法
更新時間:2013年09月02日 15:42:20 作者:
由于ListView,GridView本身都繼承于ScrollView,一旦在ScrollView中嵌套ScrollView,在ScrollView中嵌套使用ListView或者GridView,ListView只會顯示一行多一點。兩者進行嵌套,即會發(fā)生沖突
那么里面的ScrollView高度計算就會出現問題。我們也就無法得到想要的效果。
核心解決方案: 重寫ListView或者GridView的OnMesure 方法。
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);
}
}
GridView
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);
}
}
}
核心解決方案: 重寫ListView或者GridView的OnMesure 方法。
復制代碼 代碼如下:
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);
}
}
GridView
復制代碼 代碼如下:
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);
}
}
}
您可能感興趣的文章:
- Android ScrollView 下嵌套 ListView 或 GridView出現問題解決辦法
- Android中ScrollView嵌套GridView顯示不全解決方法
- Android中ScrollView嵌套GridView的解決辦法
- Android 中ScrollView嵌套GridView,ListView的實例
- Android 中 GridView嵌套在ScrollView里只有一行的解決方法
- Android開發(fā)之機頂盒上gridview和ScrollView的使用詳解
- Android編程開發(fā)之ScrollView嵌套GridView的方法
- ScrollView嵌套ListView及ListView嵌套的高度計算方法
- Android開發(fā)實現ScrollView中嵌套兩個ListView的方法
- Android解決ScrollView下嵌套ListView和GridView中內容顯示不全的問題
相關文章
Android自定義組合控件之自定義下拉刷新和左滑刪除實例代碼
最近做了個項目,其中有項目需求,用到下拉刷新和左滑刪除,網上沒有找到比較理想的解決辦法。下面小編給大家分享我的一個小demo有關Android自定義組合控件之自定義下拉刷新和左滑刪除實例代碼,需要的朋友參考下2016-04-04
Android中利用SurfaceView制作抽獎轉盤的全流程攻略
這篇文章主要介紹了Android中利用SurfaceView制作抽獎轉盤的全流程,從圖案的繪制到轉盤的控制再到布局,真的非常全面,需要的朋友可以參考下2016-04-04
Android源碼探究之BaseDexClassLoader的使用
今天解決一個插件化問題的時候,竟然發(fā)現SO沒有正常加載,很怪異,最終排查下來發(fā)現竟然是參數傳入錯誤導致的。這就扯到了本文的標題上了,BaseDexClassLoader中的4個參數該如何傳入,傳入的又是什么呢2022-08-08
Android編程圖片加載類ImageLoader定義與用法實例分析
這篇文章主要介紹了Android編程圖片加載類ImageLoader定義與用法,結合實例形式分析了Android圖片加載類ImageLoader的功能、定義、使用方法及相關操作注意事項,代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下2017-12-12

