閱讀536 返回首頁    go 阿裏雲 go 技術社區[雲棲]


android 關於 ScrollView嵌套GridView,ListView 顯示和滑動的問題

ScrollView GridView ListView 都有上下滑動的響應函數,所以嵌套在一起的話,裏麵那一層就監聽不到滑動的響應。

如果不處理的話,GridView 和 ListView 在ScrollView中隻會顯示一部分高度,這樣看起來不是很鬱悶?


在特殊的情況下,我們需要嵌套起來使用才能符合界麵的設計.

SO 在網上找了一些時間後,發現解決辦法還是有的,一下是我個人覺得簡單,易用,缺點不多的一種方法:

自定義一個類 繼承GridView或者ListView,重寫其中的 onMeasure 方法、、


onMeasure方法是在這個View構造的時候確定它的長度和寬度的方法。

我們重寫的時候,要把滾動條設置為沒有滾動條,Gridview就會按照有多少行,就顯示多少行

廢話少說,上代碼

  1. public class MyGridView extends GridView {
  2. private boolean haveScrollbar = true;
  3. public MyGridView(Context context) {
  4. super(context);
  5. }
  6. public MyGridView(Context context, AttributeSet attrs) {
  7. super(context, attrs);
  8. }
  9. public MyGridView(Context context, AttributeSet attrs, int defStyle) {
  10. super(context, attrs, defStyle);
  11. }
  12. /**
  13. * 設置是否有ScrollBar,當要在ScollView中顯示時,應當設置為false。 默認為 true
  14. *
  15. * @param haveScrollbars
  16. */
  17. public void setHaveScrollbar(boolean haveScrollbar) {
  18. this.haveScrollbar = haveScrollbar;
  19. }
  20. @Override
  21. protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
  22. if (haveScrollbars == false) {
  23. int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
  24. super.onMeasure(widthMeasureSpec, expandSpec);
  25. } else {
  26. super.onMeasure(widthMeasureSpec, heightMeasureSpec);
  27. }
  28. }
  29. }
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中這麼定義:

  1. <com.erp.android.control.NDGridView
  2. android:id="@+id/myGrideView"
  3. android:layout_width="fill_parent"
  4. android:layout_height="wrap_content"
  5. android:layout_gravity="center"
  6. android:columnWidth="100dp"
  7. android:gravity="center"
  8. android:numColumns="auto_fit" >
  9. </com.erp.android.control.MyGridView>
<com.erp.android.control.NDGridView android: android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:columnWidth="100dp" android:gravity="center" android:numColumns="auto_fit" > </com.erp.android.control.MyGridView>


重寫就重寫了這一個地方,我認為的缺點就是設置之後不能上下滑動了,不過有ScrollView 可以代替這一功能

最後更新:2017-04-02 17:28:41

  上一篇:go eclipse svn插件 狀態圖標 版本號 不能顯示的解決辦法
  下一篇:go ScrollView嵌套GridView、ListView的解決辦法