1. 程式人生 > >ScrollView與GridView滾動發生衝突

ScrollView與GridView滾動發生衝突

   當GridView巢狀在ScrollView裡時,發現GridView只顯示了一行。這是因為GridView有自己的滾動條,而ScrollView也有自己的滾動條,兩者發生了衝突。

解決方法是重寫GridView的OnMesure方法,使其不再出現滾動條

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 defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);
    }
}

onMeasure()方法的一些解釋:

MeasureSpc類封裝了父View傳遞給子View的佈局(layout)要求。

static int makeMeasureSpec(int size,int mode) : 根據提供的大小值和模式,建立一個測量值(格式)

最大模式(MeasureSpec.AT_MOST):這個也就是父元件,能夠給出的最大的空間。

然後在佈局檔案中加入MyGridView就行。

    <com.example.administrator.calendartest.MyGridView
        android:id="@+id/myGridView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:numColumns="4"
    </com.example.administrator.calendartest.MyGridView>