Coins arrondis sur le bouton matériel

je suis les conseils de questions comme pour créer un style de bouton comme suggéré sur la conception du matériau.

Button

cependant, je dois changer le rayon du coin et je n'ai pas pu le faire en héritant Widget.AppCompat.Button.Colored style et paramétrage du rayon.

Comment puis-je avoir le même style mais avec des coins arrondis?

18
demandé sur Gabriele Mariotti 2017-03-09 03:52:52

5 réponses

vous devez hériter de ce style.

Ajouter dans vos styles.xml:

 <style name="AppTheme.RoundedCornerMaterialButton" parent="Widget.AppCompat.Button.Colored">
        <item name="android:background">@drawable/rounded_shape</item>
 </style>

Ajouter un fichier drawable / rounded_shape.xml:

<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"   >

    <solid
        android:color="@color/colorAccent" >
    </solid>

    <corners
        android:radius="11dp"   >
    </corners>

</shape>

et enfin dans votre mise en page:

 <Button
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:text="Test Text"
       style="@style/AppTheme.RoundedCornerMaterialButton"/>

modifier: réponse mise à jour pour utiliser la couleur du thème plutôt que celle codée en dur.

24
répondu Nikita Shaposhnik 2017-03-09 01:19:49

Avec la Support Library 28.0.0-version alpha1, la bibliothèque de Design contient maintenant le Material Button.

Vous pouvez ajouter ce bouton à notre fichier de mise en page avec:

<android.support.design.button.MaterialButton
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="XXXXX"
    android:textSize="18sp"
    android:backgroundTint="@color/colorPrimary"
    app:icon="@drawable/ic_android_white_24dp" />

vous pouvez définir le rayon de coin avec cet attribut:

  • app:cornerRadius: utilisé pour définir le rayon utilisé pour les coins du bouton

enter image description here

Actuellement utiliser vous devez utiliser Android Studio 3.1 ou plus et:

android {
    compileSdkVersion 'android-P'

    defaultConfig {
        targetSdkVersion 'P'
    }
    ...
}
dependencies {
  implementation 'com.android.support:design:28.0.0-alpha1'
}

vous pouvez aussi utiliser le nouveau composants matériels pour Android.

Dans ce cas, vous pouvez utiliser dans votre fichier de mise en page:

<com.google.android.material.button.MaterialButton
    android:id="@+id/material_button"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="XXXXX"
    app:cornerRadius=".."/>

Actuellement vous devez utiliser Android Studio 3.2 et:

android {
    compileSdkVersion 'android-P'

    defaultConfig {
        targetSdkVersion 'P'
    }
    ...
}
dependencies {
  implementation 'com.google.android.material:material:1.0.0-alpha1'
}

La doc officielle ici et tous les android specs ici.

14
répondu Gabriele Mariotti 2018-05-10 17:35:40

je vais vous raconter ma solution exacte pour cela . A l'intérieur des balises de sélection, vous pouvez mettre des éléments (fonctionnalité des boutons)

Le deuxième élément de la balise de sélection a le comportement opposé. Vous pouvez ajouter autant que le sélecteur (comportement du bouton) Ajouter ce XML à dessiner comme arrière-plan du bouton android: background= "@drawable/this xml"

    <?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="#ffffff"> <!-- this is the ripple color(first touch color changes into this color) -->
    <item>
        <selector> 
            <item android:state_enabled="true">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <!-- default button color -->

                    <solid android:color="@color/colorPrimary"></solid>

                    <corners android:radius="151dp"></corners>

                </shape>
            </item>
            <item>
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <!-- button disabled color opposite behaviour -->
                    <solid android:color="#e9d204"></solid>

                    <corners android:radius="151dp"></corners>

                </shape>
            </item>
        </selector>
    </item>
    <item>
        <selector>
            <item android:state_pressed="true">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <!-- button first touch of your finger color -->
                    <solid android:color="#1989fa"></solid>

                    <corners android:radius="151dp"></corners>

                </shape>
            </item>
        </selector>
    </item>
    <item>
        <selector>
            <item android:state_hovered="true">
                <shape xmlns:android="http://schemas.android.com/apk/res/android"
                    android:shape="rectangle">
                    <!-- hovered with a note pencil -->
                    <solid android:color="#4affffff"></solid>

                    <corners android:radius="151dp"></corners>

                </shape>
            </item>
        </selector>
    </item>

</ripple>
3
répondu Emre Kilinc Arslan 2018-02-28 13:21:48

aussi une autre façon simple est de l'enrouler autour de cardView, N'oubliez pas de définir layout_width et layout_height de cardView à wrap_content, aussi toute la marge nécessaire dont le bouton aura besoin doit être appliquée à la cardView

<android.support.v7.widget.CardView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:cardCornerRadius="8dp"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginBottom="40dp"
            app:elevation="10dp">

            <android.support.v7.widget.AppCompatButton
                android:id="@+id/login_twitter"
                android:tag="login_twitter"
                android:layout_width="300dp"
                android:layout_height="60dp"
                android:paddingLeft="10dp"
           android:foreground="?attr/selectableItemBackgroundBorderless"
                android:textColor="@color/blue_grey_ligthen_5"
                android:drawableLeft="@drawable/twitter"
                android:background="@color/twitter"
                android:text="@string/login_with_twitter" />
        </android.support.v7.widget.CardView>
0
répondu razzbee 2017-12-08 20:53:18

bouton de matériau arrondi avec effet D'Ondulation

enter image description here

Créer un fichier dans le dossier drawable ondulation.xml

<?xml version="1.0" encoding="utf-8"?>
<ripple xmlns:android="http://schemas.android.com/apk/res/android"
    android:color="?android:attr/colorControlHighlight">
    <item android:id="@android:id/mask">
        <shape android:shape="rectangle">
            <solid android:color="@color/colorPrimary" />
            <corners android:radius="20dp" />
        </shape>
    </item>
    <item android:drawable="@drawable/rounded_shape" />
</ripple>

Créer un fichier dans le dossier drawable rounded_shape.xml

<?xml version="1.0" encoding="utf-8"?>
<shape
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle"   >
    <solid
        android:color="@color/colorPrimary" >
    </solid>
    <corners
        android:radius="20dp"   >
    </corners>
</shape>

Et sur votre Bouton:

<Button
android:id="@+id/button1"
android:background="@drawable/ripple"
android:text="Login"/>
0
répondu Christer 2018-09-06 12:50:23