14

I am trying to create an button which is attached to the TextView above the button as shown in the below image.

enter image description here

The above screenshot is taken from the Note 4 and the OS version is 5.0.1.

Below is the code is used to achieve the UI.

layout/xyz.xml

    <Button
    android:layout_width="250dp"
    android:layout_height="50dp"
    android:theme="@style/myButton"
    android:text="Cancel"/>

values-v21/style.xml

    <style name="myButton" parent="@style/Base.Widget.AppCompat.Button">
    <item name="android:colorButtonNormal">#3578A9</item>
    <item name="android:inset">0dp</item>
    </style>

But if I run the same code in Nexus4 OS verison 5.1.1, the button is taking the margin for all the 4 sides and the screenshot looks like below.

enter image description here

If I remove the "android:theme" and provide the "android:background", the UI looks like the first image. But It won't give the ripple effect. So how the achieve the UI as first image with the ripple effect.

sachi
  • 195
  • 1
  • 2
  • 12

3 Answers3

34

android:insetBottom="0dp"

<com.google.android.material.button.MaterialButton
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="56dp"
        android:text="Edit"
        app:cornerRadius="0dp"
        android:insetBottom="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />
Meysam Keshvari
  • 1,141
  • 12
  • 14
  • setting insetBottom to 0dp worked in single activity architecture where all buttons aligned to bottom were leaving small gap at bottom. – Chandan Pednekar Aug 08 '20 at 18:26
9

Step 1: Put the below code in styles.xml

    <style name="myColoredButton">
        <item name="android:textColor">#FF3E96</item>
        <item name="android:padding">0dp</item>
        <item name="android:minWidth">88dp</item>
        <item name="android:minHeight">36dp</item>
        <item name="android:elevation">1dp</item>
        <item name="android:translationZ">1dp</item>
        <item name="android:background">#FF0000</item>
    </style>

Here you can change the textColor( I have used #FF3E96 above) and background color (I have used #FF0000) for your button. You can also override textColor values from your Button related layout xml by using android:colorButtonNormal.

Step 2:Create a new XML file under drawables folder and add the following code: I named my XML file as primary.xml

<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="@color/colorPrimary">
    <item>
        <shape xmlns:android="http://schemas.android.com/apk/res/android">
            <corners android:radius="1dp" />
            <solid android:color="#8B8386" />
        </shape>
    </item>
</ripple>

Step 3: Use the style and drawable in your Button as follows.

    <Button
        style="@style/myColoredButton"
        android:layout_width="250dp"
        android:layout_height="50dp"
        android:text="Cancel"
        android:gravity="center"
        android:background="@drawable/primary_round"
        android:colorButtonNormal="#3578A9" />

Hope it solves your problem.

Miha_x64
  • 5,973
  • 1
  • 41
  • 63
Kashi
  • 234
  • 2
  • 5
2

enter image description here

I also had issue related to top and bottom spacing for Apply button as you can see above image.

I wanted to show button with uniform background without any spacing as you can see for "Reset" button. But I have to set both property button background as well as background Tint to same color to achieve this. If I reuse this buttons at more than one place then I have to programmatically change 2 property to change background color of button.

You can try below solution:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <com.google.android.material.button.MaterialButton
        android:id="@+id/btnLeftOk"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:filterTouchesWhenObscured="true"
        android:gravity="center"
        android:text="@string/apply"
        android:textColor="@color/white"
        app:backgroundTint="@color/primary_dark_gray"
        app:cornerRadius="0dp" />

    <com.google.android.material.button.MaterialButton
        android:id="@+id/btnRightCancel"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:filterTouchesWhenObscured="true"
        android:gravity="center"
        android:text="@string/reset"
        android:insetTop="0dp"
        android:insetBottom="0dp"
        android:textColor="@color/white"
        app:cornerRadius="0dp"
        app:backgroundTint="@color/btn_background_gray" />
</LinearLayout>

After applying below property to "Reset" button.

android:insetTop="0dp"
android:insetBottom="0dp"
  1. Button spacing will be removed from top and bottom. It will occupy spacing with button color. (like in Reset button)
  2. Button background can be changed using one property app:backgroundTint.
Pradip Tilala
  • 1,715
  • 16
  • 24