android 關於 ScrollView嵌套GridView,ListView 顯示和滑動的問題
ScrollView GridView ListView 都有上下滑動的響應函數,所以嵌套在一起的話,裏麵那一層就監聽不到滑動的響應。
如果不處理的話,GridView 和 ListView 在ScrollView中隻會顯示一部分高度,這樣看起來不是很鬱悶?
在特殊的情況下,我們需要嵌套起來使用才能符合界麵的設計.
SO 在網上找了一些時間後,發現解決辦法還是有的,一下是我個人覺得簡單,易用,缺點不多的一種方法:
自定義一個類 繼承GridView或者ListView,重寫其中的 onMeasure 方法、、
onMeasure方法是在這個View構造的時候確定它的長度和寬度的方法。
我們重寫的時候,要把滾動條設置為沒有滾動條,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);
- }
- }
- }
在xml中這麼定義:
- <com.erp.android.control.NDGridView
- android:id="@+id/myGrideView"
- 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