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

來源:互聯網
上載者:User
ScrollView GridView ListView 都有上下滑動的響應函數,所以嵌套在一起的話,裡面那一層就監聽不到滑動的響應。

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


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

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

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

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

我們重寫的時候,要把捲軸設定為沒有捲軸,Gridview就會按照有多少行,就顯示多少行

廢話少說,上代碼

[html]
view plaincopyprint?
  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 {</p><p>private boolean haveScrollbar = true;</p><p>public MyGridView(Context context) {<br />super(context);<br />}</p><p>public MyGridView(Context context, AttributeSet attrs) {<br />super(context, attrs);<br />}</p><p>public MyGridView(Context context, AttributeSet attrs, int defStyle) {<br />super(context, attrs, defStyle);<br />}</p><p>/**<br /> * 設定是否有ScrollBar,當要在ScollView中顯示時,應當設定為false。 預設為 true<br /> *<br /> * @param haveScrollbars<br /> */<br />public void setHaveScrollbar(boolean haveScrollbar) {<br />this.haveScrollbar = haveScrollbar;<br />}</p><p>@Override<br />protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {<br />if (haveScrollbars == false) {<br />int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);<br />super.onMeasure(widthMeasureSpec, expandSpec);<br />} else {<br />super.onMeasure(widthMeasureSpec, heightMeasureSpec);<br />}<br />}<br />}<br />
在xml中這麼定義:

[html]
view plaincopyprint?
  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<br /> android:id="@+id/myGrideView"<br /> android:layout_width="fill_parent"<br /> android:layout_height="wrap_content"<br /> android:layout_gravity="center"<br /> android:columnWidth="100dp"<br /> android:gravity="center"<br /> android:numColumns="auto_fit" ><br /> </com.erp.android.control.MyGridView>

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.