Avec l'officiel Bibliothèque des composants matériels vous pouvez utiliser le MaterialButton
appliquer un Widget.MaterialComponents.Button.Icon
le style.
Quelque chose comme :
<com.google.android.material.button.MaterialButton
android:layout_width="48dp"
android:layout_height="48dp"
style="@style/Widget.MaterialComponents.Button.Icon"
app:icon="@drawable/ic_add"
app:iconSize="24dp"
app:iconPadding="0dp"
android:insetLeft="0dp"
android:insetTop="0dp"
android:insetRight="0dp"
android:insetBottom="0dp"
app:shapeAppearanceOverlay="@style/ShapeAppearanceOverlay.MyApp.Button.Rounded"
/>
Actuellement, le app:iconPadding="0dp"
, android:insetLeft
, android:insetTop
, android:insetRight
, android:insetBottom
sont nécessaires pour centrer l'icône sur le bouton en évitant tout espace de remplissage supplémentaire.
Utilisez le app:shapeAppearanceOverlay
pour obtenir des coins arrondis. Dans ce cas, vous obtiendrez un cercle.
<style name="ShapeAppearanceOverlay.MyApp.Button.Rounded" parent="">
<item name="cornerFamily">rounded</item>
<item name="cornerSize">50%</item>
</style>
Le résultat final :
Avec jetpack compose que vous pouvez utiliser :
Button(
onClick = { /* Do something! */ },
modifier = Modifier.width(48.dp).height(48.dp),
shape = CircleShape
) {
Icon(Icons.Filled.Add, "")
}
0 votes
Vous devez étendre la classe du bouton et surcharger la méthode onDraw.
2 votes
Mais le problème est que si j'étend cela, et que l'utilisateur touche en dehors du cercle, Onlcick sera appelé, comment résoudre cela ?
0 votes
Pourquoi ne pas simplement définir une image de forme ronde comme arrière-plan de votre bouton ?
0 votes
J'ai fait un simple OnDrawn, il s'affiche sur la vue Design, mais quand je veux exécuter l'application, il y a ce problème au chargement : Android.view.InflateException : Fichier XML binaire ligne #52 : Error inflating class com.inaros.magicbox._customButtonPlay