2011-08-20 80 views
24

我想知道在GridView中的項目之間繪製分隔線的最簡單方法(當前是textviews)。我能想到的唯一方法就是圍繞這些文字視圖繪製邊框,所以當它們合併時,它們看起來像連續的水平和垂直分隔線。Android GridView繪製分隔線

有一個setDivider()列表視圖,但不是gridviews?

謝謝。

+0

http://stackoverflow.com/a/12047760/ 375093這個答案似乎比下面的答案更容易,更聰明 – Sundeep

+0

@Sundeep:如果你設置了一個GridView項目的背景顏色,那麼它的顏色項目在聚焦時不會改變。用戶的選擇克服了這個問題。 –

+0

@Sundeep它會減慢繪製過程。 – twlkyao

回答

28

不幸的是,在查看源代碼後,除了採用向每個單元格添加邊框的方法之外,我看不到任何添加邊框的簡單方法。作爲參考,我會在這裏發佈我的解決方案。

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="horizontal" 
    android:background="@drawable/list_selector"> 

    <!-- Cell contents --> 

</LinearLayout> 

list_selector.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item 
     android:state_selected="true" 
     android:drawable="@drawable/item_border_selected" 
    /> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/item_border_selected" 
    /> 
    <item 
     android:drawable="@drawable/item_border" 
    /> 
</selector> 

item_border.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid 
     android:color="@android:color/transparent" 
    /> 
    <stroke 
     android:width="1px" 
     android:color="@color/list_divider" 
    /> 
</shape> 

item_border_selected.xml

<?xml version="1.0" encoding="UTF-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android"> 
    <solid 
     android:color="@color/list_select" 
    /> 
    <stroke 
     android:width="1px" 
     android:color="@color/list_divider" 
    /> 
</shape> 

items_view.xml

<?xml version="1.0" encoding="utf-8"?> 
<GridView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:layout_marginLeft="-1px" 
    android:layout_marginRight="-1px" 
    android:listSelector="@android:color/transparent" 
/> 

由於面積擴大一倍,因爲他們加入他們的相鄰小區的所有行,我做除法1px的大小,而不是1DP所以它不」在某些屏幕上顯示得太大。此外,我使網格視圖具有負邊界來隱藏任何一邊的線條。我希望這可以幫助別人。

+0

不錯。你的list_divider和list_select被定義爲什麼? – LuxuryMode

+0

謝謝,在list_selector.xml中,我使用了「@ drawable/item_border」它與項目的組成部分一樣工作正常,問題在於如何避免UI上的分隔符上的onclick監聽器?如果點擊該項目的邊框也選擇:(!!任何解決方案?? –

35

如果你只想簡單的線條作爲邊框,非常非常簡單的設置是背景顏色爲GridView和適當的填充&間距:

<GridView 
    (...) 
    android:background="@color/LightGold" 
    android:listSelector="@android:color/transparent" 
    android:horizontalSpacing="1dip" 
    android:verticalSpacing="1dip" 
    android:paddingLeft="1dip" 
    android:paddingTop="1dip" /> 
+2

沒有工作,我只是得到了一個純色和沒有間距。 – Noumenon

+0

偉大的想法,它會給你分頻器的效果,你可以增加 – Abdullah

+2

只有當您以後分別設置每個單元格的背景時,纔會起作用 – Maragues