上方是一個view ,下方是gridview,但是在滑動的時候卻是整片UI滑動,
也就是當滑動時會變成像右圖的樣式。
要實做這種view 有兩種方式
一種是在ScrollView裡面動態的將view 加入
另一種方法是使用 ScrollView裡面包含GridView
關於第一種作法,之後有空會在詳細說明
現在要介紹的是第二種方法,當我在實作這個方法時,
我天真的以為只需要在scrollview 裡面包 gridview就好了
程式碼如下
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#333333" tools:context=".MainActivity" > <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:layout_width="match_parent" android:layout_height="300dp" android:background="#a5c9ff" android:gravity="center_horizontal|center_vertical" android:text="@string/hello_world" /> <GridView android:id="@+id/gridview" android:layout_width="match_parent" android:layout_height="match_parent" android:horizontalSpacing="3dp" android:numColumns="2" android:stretchMode="columnWidth" android:verticalSpacing="3dp" /> </LinearLayout> </ScrollView>
當我開開心心的將code 寫好,deploy到手機之後,
這才發現現實是殘酷的,事情永遠不是像我想得那麼簡單,
gridview只顯示出兩個item,其他的item不翼而飛。
為了要解決這個問題,就必須客製化gridview
public class MyGridView extends GridView { 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); } @Override public void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } }
在onMeasure的時候調整高度,然後更改原本的gridview改成客製化的gridview
這樣所有的問題就都解決了。
附上 sample Code
沒有留言:
張貼留言