2014年2月1日土曜日

GridViewで余白が消せない

GridViewを使ってカレンダーを作成していたら余白がどうしても消せずに、問題解決まで2時間も費やしてしまった。
レイアウトのどこかにmarginを設定してしまっているのかと思い、関係しそうなレイアウトを洗ってみるが怪しいところはどこにもなく、いつものダークサイドに落ちかけた。

自分の悪い癖で、一度ダークサイドに落ちるとますます深みにはまり論点がずれてしまう。
今回は一旦冷静になりググってみるとあっさり解決方法が見つかる。



GridViewにはどうもデフォルトスタイルが設定されており、その中で余白が設定されているようである。
①、②の手順で解決!

① 以下のようにgridview_bg.xmlを作成してdrawableに保存

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 項目にフォーカス有り かつ 押されていない -->
    <item
        android:drawable="@android:color/transparent"
        android:state_focused="true"
        android:state_pressed="false">
    </item>
    <!-- 項目にフォーカス有り かつ 押されている -->
    <item
        android:drawable="@android:color/transparent"
        android:state_focused="true"
        android:state_pressed="true">
    </item>
    <!-- 項目にフォーカスなし かつ 押されている -->
    <item
        android:drawable="@android:color/transparent"
        android:state_focused="false"
        android:state_pressed="true">
    </item>
</selector>


② GridViewタグでandroid:listSelector="@drawable/gridview_bg"を追加

<GridView
        android:id="@+id/gridView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:listSelector="@drawable/gridview_bg">
 </GridView>