自定义网格布局列边框

Custom Grid Layout column border

我有一个问题。 如何在我的 xml 文件中创建自定义双侧边框?

我尝试使用自定义可绘制对象的各种变体,但最终没有得到我需要的结果。

有什么想法吗?在 2x2 网格示例中,它有效。但是,我想要一个 3x4 网格。

目前,我有这个布局文件:

<?xml version="1.0" encoding="utf-8"?>
<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:columnCount="3"
    tools:background="@color/colorLightBlue">

    <Button
        android:id="@+id/btn_pass_code_1"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:background="@color/colorTransparent"
        android:text="1"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:id="@+id/btn_pass_code_2"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:background="@color/colorTransparent"
        android:text="2"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:id="@+id/btn_pass_code_3"
        android:layout_columnWeight="0"
        android:layout_gravity="fill"
        android:background="@color/colorTransparent"
        android:text="3"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:id="@+id/btn_pass_code_4"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:background="@color/colorTransparent"
        android:text="4"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:id="@+id/btn_pass_code_5"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:background="@color/colorTransparent"
        android:text="5"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:id="@+id/btn_pass_code_6"
        android:layout_columnWeight="1"
        android:background="@color/colorTransparent"
        android:layout_gravity="fill"
        android:text="6"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:background="@color/colorTransparent"
        android:id="@+id/btn_pass_code_7"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:text="7"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:background="@color/colorTransparent"
        android:id="@+id/btn_pass_code_8"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:text="8"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:background="@color/colorTransparent"
        android:id="@+id/btn_pass_code_9"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:text="9"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:background="@color/colorTransparent"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:background="@color/colorTransparent"
        android:id="@+id/btn_pass_code_0"
        android:layout_columnWeight="1"
        android:layout_gravity="fill"
        android:text="0"
        android:textColor="@color/colorWhite"
        android:textSize="26sp" />

    <Button
        android:id="@+id/btn_pass_code_delete"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:background="@drawable/input_delete"
        android:textColor="@color/colorWhite"
        android:textSize="22sp" />
</GridLayout>

您可以将其用作按钮的背景:

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Change top, bottom, left and right values to change the borders 
    as you like, this configuration is for top/left border-->
    <item android:top="-1dp" android:left="-1dp">
        <shape android:shape="rectangle">
            <stroke
                android:width="1dip"
                android:color="@android:color/holo_blue_bright" />
        </shape>
    </item>
</layer-list>

您必须根据按钮在网格中的位置更改边框才能获得所需的结果。您必须创建从蓝色到白色的渐变才能重现预期结果(如您引用的第一张图片)。