web-dev-qa-db-ja.com

android gridview行の区切り線/区切り線

グリッドビューの行間に(水平)分割線を表示する方法はありますか?

すべてのグリッドアイテムの下に小さなディバイダーイメージを配置しようとしましたが、これは解決策ではありません。行がアイテムで完全に満たされていない場合、行全体にまたがらないためです。

すべての行の間に画像を追加する方法はありますか?行間のスペースを変更する方法しか見つけることができません。

34
Frank

私は、次のようなカスタムグリッドビューを作成することになりました。

https://stackoverflow.com/a/9757501/131034

グリッドビューの1つのアイテムとまったく同じ高さで、下部にデバイダーを持つ背景画像を使用しています。

チャームのように機能します!

4
Frank

グリッドアイテムにカスタムレイアウトを使用している場合。以下のコードが機能します。

ステップ1:GridViewに背景色を与える

これは仕切りとして機能します。
horizontalSpacingverticalSpacing1dp
backgroundColorが仕切り色になります。

<GridView
        Android:id="@+id/gridView1"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:background="#e5e5e5"
        Android:horizontalSpacing="1dp"
        Android:numColumns="auto_fit"
        Android:stretchMode="columnWidth"
        Android:verticalSpacing="1dp" >

手順2:カスタムグリッドアイテムのレイアウトに背景色を付ける

これは、GridItemsの前景色として機能します。
私の場合は、白のままにしました(#fff)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    Android:gravity="center"
    Android:background="#fff"
    Android:padding="15dp"
     >

    <ImageView
        Android:id="@+id/icon"
        Android:layout_width="50dp"
        Android:layout_height="50dp"
        Android:src="@drawable/ic_launcher_transparent" />

    <TextView
        Android:id="@+id/lable"
        Android:layout_marginTop="5dp"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content"
        Android:text="Medium Text"
        Android:textStyle="bold"
        Android:textColor="#D0583B"
        Android:textAppearance="?android:attr/textAppearanceSmall" />

</LinearLayout>

結果

enter image description here

注:
垂直セパレータが不要な場合は、horizontalSpacing = 0dp
水平セパレータが不要な場合は、verticalSpacing = 0dp

81

OPが受け入れたリンクを使用して、これをどのように実装したかを共有したかっただけです。私の場合、セパレータの長さも制御する必要があったため、GridViewのサブクラス化を回避できませんでした。

public class HorizontalSeparatorGridView extends GridView {

    // Additional methods 

    @Override
    protected void dispatchDraw(Canvas canvas) {

        final int count = getChildCount();
        for(int i = 0; i < count; i++) {
            View child = getChildAt(i);
            int bottom = child.getBottom();
            int left = child.getLeft();
            int right = child.getRight();

            Paint paint = new Paint();
            Paint.setColor(0xffececec);

            Paint.setStrokeWidth(Math.round(0.5 * density));

            int offset = // Some offset

            canvas.drawLine(left + offset, bottom, right - offset, bottom, Paint);
        }


        super.dispatchDraw(canvas);
    }

安全のためにdispatchDrawとは対照的にonDrawをサブクラス化しましたが、この場合は重要ではないと思います。

3
jrhee17

次のことをお勧めします。

`

    <TableRow
        Android:id="@+id/tableRow1"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="1sp"
        Android:layout_marginLeft="7sp"
        Android:layout_marginRight="7sp"
        Android:layout_marginTop="7sp"
        Android:background="@Android:color/transparent">

        <TextView
            Android:id="@+id/lblDeposit"
            Android:layout_width="60sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="0sp"
            Android:background="@drawable/rounded_top_left_rectangle"
            Android:gravity="center"
            Android:paddingLeft="5sp"
            Android:scaleType="fitXY"
            Android:text="Deposit"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>

        <TextView
            Android:id="@+id/lblDepositvalue"
            Android:layout_width="50sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="2sp"
            Android:layout_marginRight="13sp"
            Android:background="@drawable/rounded_top_right_rectangle"
            Android:gravity="center_vertical|center_horizontal"
            Android:scaleType="fitXY"
            Android:text="40000/-Rs"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>
    </TableRow>

    <TableRow
        Android:id="@+id/tableRow2"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"
        Android:layout_marginBottom="6sp"
        Android:layout_marginLeft="7sp"
        Android:layout_marginRight="7sp"
        Android:layout_marginTop="2sp"
        Android:background="@Android:color/transparent">

        <TextView
            Android:id="@+id/lblPoints"
            Android:layout_width="60sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="0sp"
            Android:background="@drawable/rounded_bottom_right_rectangle"
            Android:gravity="center"
            Android:paddingLeft="5sp"
            Android:scaleType="fitXY"
            Android:text="Points "
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>

        <TextView
            Android:id="@+id/lblPointsValue"
            Android:layout_width="50sp"
            Android:layout_height="40sp"
            Android:layout_gravity="center_vertical"
            Android:layout_marginLeft="2sp"
            Android:layout_marginRight="13sp"
            Android:background="@drawable/rounded_bottom_left_rectangle"
            Android:gravity="center_vertical|center_horizontal"
            Android:scaleType="fitXY"
            Android:text="20"
            Android:textAppearance="?android:attr/textAppearanceMedium"
            Android:textColor="#000">
        </TextView>
    </TableRow>
</TableLayout>`  
0
Snehal Poyrekar