Android之ScrollView嵌套ListView和GridView沖突的解決方法
更新時間:2013年09月02日 15:42:20 作者:
由于ListView,GridView本身都繼承于ScrollView,一旦在ScrollView中嵌套ScrollView,在ScrollView中嵌套使用ListView或者GridView,ListView只會顯示一行多一點(diǎn)。兩者進(jìn)行嵌套,即會發(fā)生沖突
那么里面的ScrollView高度計算就會出現(xiàn)問題。我們也就無法得到想要的效果。
核心解決方案: 重寫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);
}
/**
* 設(shè)置是否有ScrollBar,當(dāng)要在ScollView中顯示時,應(yīng)當(dāng)設(shè)置為false。 默認(rèn)為 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 方法。
復(fù)制代碼 代碼如下:
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
復(fù)制代碼 代碼如下:
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);
}
/**
* 設(shè)置是否有ScrollBar,當(dāng)要在ScollView中顯示時,應(yīng)當(dāng)設(shè)置為false。 默認(rèn)為 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出現(xiàn)問題解決辦法
- Android中ScrollView嵌套GridView顯示不全解決方法
- Android中ScrollView嵌套GridView的解決辦法
- Android 中ScrollView嵌套GridView,ListView的實例
- Android 中 GridView嵌套在ScrollView里只有一行的解決方法
- Android開發(fā)之機(jī)頂盒上gridview和ScrollView的使用詳解
- Android編程開發(fā)之ScrollView嵌套GridView的方法
- ScrollView嵌套ListView及ListView嵌套的高度計算方法
- Android開發(fā)實現(xiàn)ScrollView中嵌套兩個ListView的方法
- Android解決ScrollView下嵌套ListView和GridView中內(nèi)容顯示不全的問題
相關(guān)文章
Android自定義組合控件之自定義下拉刷新和左滑刪除實例代碼
最近做了個項目,其中有項目需求,用到下拉刷新和左滑刪除,網(wǎng)上沒有找到比較理想的解決辦法。下面小編給大家分享我的一個小demo有關(guān)Android自定義組合控件之自定義下拉刷新和左滑刪除實例代碼,需要的朋友參考下2016-04-04
Android 詳解自定義圓角輸入框和按鈕的實現(xiàn)流程
對于安卓程序員來說,自定義view簡直不要太重要,畢竟有很多功能,譬如圓形頭像這些,用單純的原生非常難以實現(xiàn),而用自定義view,簡直分分鐘,今天我們來實現(xiàn)自定義圓角輸入框和按鈕,大家可以跟著練習(xí),掌握技巧2021-11-11
Android開發(fā)全局音量調(diào)整的實現(xiàn)方式詳解
這篇文章主要為大家介紹了Android開發(fā)全局音量調(diào)整的實現(xiàn)方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11
Android中利用SurfaceView制作抽獎轉(zhuǎn)盤的全流程攻略
這篇文章主要介紹了Android中利用SurfaceView制作抽獎轉(zhuǎn)盤的全流程,從圖案的繪制到轉(zhuǎn)盤的控制再到布局,真的非常全面,需要的朋友可以參考下2016-04-04
Android實現(xiàn)頂部導(dǎo)航菜單左右滑動效果
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)頂部導(dǎo)航菜單左右滑動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-06-06
Android源碼探究之BaseDexClassLoader的使用
今天解決一個插件化問題的時候,竟然發(fā)現(xiàn)SO沒有正常加載,很怪異,最終排查下來發(fā)現(xiàn)竟然是參數(shù)傳入錯誤導(dǎo)致的。這就扯到了本文的標(biāo)題上了,BaseDexClassLoader中的4個參數(shù)該如何傳入,傳入的又是什么呢2022-08-08
Android實現(xiàn)簡單的popupwindow提示框
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)簡單的popupwindow提示框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-10-10
Android編程圖片加載類ImageLoader定義與用法實例分析
這篇文章主要介紹了Android編程圖片加載類ImageLoader定義與用法,結(jié)合實例形式分析了Android圖片加載類ImageLoader的功能、定義、使用方法及相關(guān)操作注意事項,代碼中備有較為詳盡的注釋便于理解,需要的朋友可以參考下2017-12-12

