web-dev-qa-db-ja.com

Android GridViewは仕切りを描画します

GridView内のアイテム(現在はテキストビュー)の間に仕切りを描く最も簡単な方法を知りたいです。私が考えることができる唯一の方法は、これらのテキストビューの周りに境界線を描くことです。そうすると、結合されたときに、連続する水平および垂直の仕切りのように見えます。

リストビューにはsetDivider()がありますが、グリッドビューにはありませんか?

ありがとう。

24
Eric Chen

残念ながら、ソースコードを見た後、境界線を追加する簡単な方法は、各セルに境界線を追加するアプローチをとる以外には見られませんでした。参考として、ここにソリューションを投稿します。

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"
/>

すべての行は隣接するセルを結合するときにサイズが2倍になるので、一部の画面では大きすぎないように、1dpではなく1pxの仕切りサイズを作成しました。また、グリッドビューに負のマージンを持たせ、両側の線を非表示にしました。これが誰かの助けになることを願っています。

28
Chase

単純な線だけを境界線にしたい場合は、GridViewの背景色と適切なパディングとスペースを設定する方がはるかに簡単です。

<GridView
    (...)
    Android:background="@color/LightGold"
    Android:listSelector="@Android:color/transparent"
    Android:horizontalSpacing="1dip"
    Android:verticalSpacing="1dip"
    Android:paddingLeft="1dip"
    Android:paddingTop="1dip" />
35
Fenix Voltres