How to create a circular outlined Material Button in Android? How to create a circular outlined Material Button in Android? android android

How to create a circular outlined Material Button in Android?


You can use the app:shapeAppearanceOverlay attribute to define the corner size. You can use the 50% value.

<com.google.android.material.button.MaterialButton    android:layout_width="50dp"    android:layout_height="50dp"    style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"    app:icon="@drawable/ic_add_24px"    app:iconSize="24dp"    app:iconGravity="textStart"    android:padding="0dp"    app:iconPadding="0dp"    android:insetLeft="0dp"    android:insetTop="0dp"    android:insetRight="0dp"    android:insetBottom="0dp"    app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Circle"    />

with:

  <style name="ShapeAppearanceOverlay.MyApp.Button.Circle" parent="">    <item name="cornerFamily">rounded</item>    <item name="cornerSize">50%</item>  </style>

enter image description here

or with the style="@style/Widget.MaterialComponents.Button.Icon"

enter image description here

It requires at least the version 1.1.0.


With jetpack compose 1.0.x you can use the OutlinedButton applying a CircleShape as shape:

    OutlinedButton(onClick = { /* ... */ },        modifier= Modifier.size(50.dp), // it is important otherwise the button is oval        shape = CircleShape,        border= BorderStroke(1.dp, Color.Blue),        contentPadding = PaddingValues(0.dp),        colors = ButtonDefaults.outlinedButtonColors(contentColor =  Color.Blue)    ) {            Icon(Icons.Default.Add, contentDescription = "content description")    }

enter image description here


By using cornerRadius along with inset you can get the rounded shape:

<com.google.android.material.button.MaterialButton    style="@style/Widget.MaterialComponents.Button.OutlinedButton.Icon"    android:layout_width="48dp"    android:layout_height="48dp"    app:cornerRadius="30dp"    android:insetTop="0dp"    android:insetBottom="0dp"    android:insetLeft="0dp"    android:insetRight="0dp"    app:icon="@drawable/ic_menu"/>


my answer is the enhancement of above answers. to build reusable resource :

<style name="ShapeAppearance.MdcShapeAppearance.SmallComponent.OutlinedCircleButton" parent="Widget.MaterialComponents.Button.OutlinedButton.Icon">    <item name="android:insetLeft">@dimen/dip_0</item>    <item name="android:insetRight">@dimen/dip_0</item>    <item name="android:insetTop">@dimen/dip_0</item>    <item name="android:insetBottom">@dimen/dip_0</item>    <item name="android:padding">@dimen/dip_0</item>    <item name="iconGravity">textStart</item>    <item name="iconPadding">@dimen/dip_0</item></style>

then, you can use it as button style. don't forget to add app:cornerRadius="@dimen/dip_20" to make it circle with your desired size

<com.google.android.material.button.MaterialButton        android:id="@+id/btn_plus"        style="@style/ShapeAppearance.MdcShapeAppearance.SmallComponent.OutlinedCircleButton"        android:layout_width="@dimen/dip_20"        android:layout_height="@dimen/dip_20"        app:cornerRadius="@dimen/dip_20"        android:layout_marginEnd="@dimen/dip_16"        app:icon="@drawable/ic_plus"        app:iconTint="?colorOnBackground"        app:layout_constraintBottom_toBottomOf="@id/tv_total_checkout_product"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintTop_toTopOf="@id/tv_total_checkout_product"        app:strokeColor="?colorOnBackground" />