woshidan's blog

そんなことよりコードにダイブ。

Grid数に合わせてViewの位置がFrameLayoutの幅を超えたとき

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="#ccc"
    android:layout_width="100dp"
    android:layout_height="100dp">

    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:id="@+id/bg_color"
        android:background="#f00" />
    <TextView
        android:id="@+id/textId"
        android:padding="3dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:textColor="#fff"
        android:layout_gravity="bottom"
        android:text="0"/>
    <TextView
        android:id="@+id/textName"
        android:padding="3dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="20dp"
        android:textColor="#fff"
        android:layout_gravity="bottom|right"
        android:text="name"/>
</FrameLayout>

上記のようにFrameLayoutlayout_widthを指定して

mRecyclerView.setLayoutManager(new GridLayoutManager(this, 3));

と列数3のGridLayoutManagerでセットすると

f:id:woshidan:20151125201646p:plain

上のように灰色の背景を見ていたりして、FrameLayoutが伸びていることが分かる。

この場合、1つLayout要素でさらに包むと直る。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    >
    <FrameLayout
        android:background="#ccc"
        android:layout_width="100dp"
        android:layout_height="100dp">

        <ImageView
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:id="@+id/bg_color"
            android:background="#f00" />
        <TextView
            android:id="@+id/textId"
            android:padding="3dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:textColor="#fff"
            android:layout_gravity="bottom"
            android:text="0"/>
        <TextView
            android:id="@+id/textName"
            android:padding="3dp"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="20dp"
            android:textColor="#fff"
            android:layout_gravity="bottom|right"
            android:text="name"/>
    </FrameLayout>
</LinearLayout>

f:id:woshidan:20151125201656p:plain