Search code examples
androidxmlandroid-layoutgridgrid-layout

Custom Grid Layout column border


I have a question. How can I do that custom double side border in my xml file?

I tried to use various variants of custom drawable, but in the end it did not work out the result I needed.

2x2 grid layout screenshot

Any ideas? In the 2x2 grid example, it works. However, I would like to have a 3x4 grid instead.

desired 3x4 grid layout screenshot

At the moment, I have this layout file:

<?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>


Solution

  • You can use this as the background of your buttons:

    <?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>
    

    You'll have to change the borders depending on the button position in the grid to achieve the result you want. You will have to create a gradient from blue to white to be able to reproduce the intended result (like in the first image you referenced).