2011-03-27 76 views
3

我有一個只有按鈕的GridView。按鈕應該能夠被按下(工作)。 但是,如果我想滾動gridview中有很多項目,它不是在我的HTC Desire上工作,但它可能在模擬器中。只用按鈕滾動GridView

我的GridView:

<GridView 
    android:id="@+id/gv_control_group" 
    android:layout_height="wrap_content" 
    android:isScrollContainer="true" 
    android:layout_width="fill_parent" 
    android:numColumns="auto_fit" 
    android:verticalSpacing="10dp" 
    android:horizontalSpacing="10dp" 
    android:stretchMode="columnWidth" 
    android:gravity="center" 
    android:scrollingCache="true" 
/> 

GridViewItem:

<LinearLayout 
    android:id="@+id/gi_socket" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:gravity="center_horizontal"> 

<Button 
    android:id="@+id/gi_btn" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:drawableTop="@drawable/green" 
/> 
</LinearLayout> 

第二個問題: 如何讓打開設備時在GridView顯示更多的內容彼此相鄰。現在,它只是綿延兩個項目的整個寬度...

android:stretchMode="none" 

不工作

編輯:

與Android 2.2 問題在仿真器與2.1一切正常。 但隨着Android 2.2的滾動是不可能了...是否有一種解決方法,使其在2.2中滾動?

回答

3

解決

的問題是,有上面的一個按鈕GridView,都在LinearLayout中。 LinearLayout自我在ScrollView中。 因此,ScrollView阻止了GridView的正常運行(但與Android 2.1不同!)

2

你可以根據你的需要實現自己的GridView並覆蓋onInterceptTouchEventonTouchEvent,這樣你就可以在你的GridView如果檢測到移動/滾動event和離開event或者如果它是在你的按鈕點擊通過event給他們。

我希望這有助於

編輯:關於你的第二個問題,你可以使用例如:

android:stretchMode="spacingWidthUniform" 
android:numColumns="auto_fit" 
android:columnWidth="100dip" 
+0

謝謝,numColumns問題消失了。但我不知道如何實現在我的派生GridView – Fender 2011-03-30 16:29:24

+0

檢查功能[this](http://developer.android.com/reference/android/view/ViewGroup.html#onInterceptTouchEvent(android.view.MotionEvent) )以獲取有關此問題的文檔。而且就像在答案中所說的那樣,如果它是一個'event'移動,則在'GridView'內部處理它,如果它是一個點擊,則將它傳遞給子節點。 – raukodraug 2011-03-30 17:22:53

+0

我無法得到它的工作...我試過了:@覆蓋\t'公佈爾onInterceptTouchEvent(MotionEvent MV){ \t \t如果(mv.getAction()== MotionEvent.ACTION_MOVE){ \t \t \t回真; \t \t} \t \t return super.onInterceptTouchEvent(mv); \t}' – Fender 2011-03-30 18:04:10