web-dev-qa-db-fra.com

lorsque vous utilisez le style Theme.MaterialComponents.Light.NoActionBar, ne modifiez pas l’arrière-plan du bouton

Afin d’utiliser Chip et ChipGroup, j’ai défini le style d’application qui étend "Theme.MaterialComponents.Light.NoActionBar" dans le fichier manifests.xml, puis j’ai défini le bouton "Android: arrière-plan", mais c’est sans effet! Pourquoi? et que puis-je faire?

c'est mon style:

  <style name="AppBaseTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="colorPrimary">@color/primary_material_light</item>
    <item name="colorPrimaryDark">@color/header_color</item>
    <item name="actionBarSize">48dp</item>
    <item name="Android:screenOrientation">portrait</item>
    <!--<item name="buttonStyle">@style/AntButton</item>-->
    <!--<item name="materialButtonStyle">@style/AntButton</item>-->
    <!--<item name="Android:button"></item>-->
    <!--<item name="Android:progressTint">@color/ffc000</item>-->
    <item name="colorAccent">@color/ffc000</item>
</style>


<style name="AntButton" parent="Android:Widget">
    <item name="Android:background">@drawable/abc_btn_default_mtrl_shape</item>
    <item name="Android:textAppearance">?android:attr/textAppearanceButton</item>
    <item name="Android:minHeight">48dip</item>
    <item name="Android:minWidth">88dip</item>
    <item name="Android:focusable">true</item>
    <item name="Android:clickable">true</item>
    <item name="Android:gravity">center_vertical|center_horizontal</item>
    <!--<item name="Android:colorButtonNormal">@color/white</item>-->
</style>

J'ai essayé de changer buttonStyle et materialButtonStyle, mais sans effet aussi!

c'est ma mise en page xml:

<LinearLayout
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <LinearLayout
        Android:id="@+id/ll_popup"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:layout_gravity="bottom"
        Android:background="@color/white"
        Android:divider="@drawable/shape_divider_05dp"
        Android:orientation="vertical"
        Android:showDividers="beginning|middle">

        <!--only can use backgroundTint to change background color-->
        <Button
            Android:id="@+id/item_popupwindows_Photo"
            Android:layout_width="match_parent"
            Android:layout_height="55dp"
            Android:backgroundTint="@color/white"
            Android:text="Pictrue"
            Android:textColor="@color/c_666666"
            Android:textSize="16sp" />

        <!--background not effect !!-->
        <Button
            Android:id="@+id/item_popupwindows_cancel"
            Android:layout_width="match_parent"
            Android:layout_height="55dp"
            Android:background="@color/white"
            Android:text="cancel"
            Android:textColor="@color/c_666666"
            Android:textSize="16sp" />
    </LinearLayout>
</LinearLayout>

c'est le résultat:

 enter image description here

Parce que j'ai utilisé Chip et ChipGroup dans APP, je dois utiliser le thème de l'utilisateur pour élargir MaterialComponents! savez-vous comment résoudre tell s'il vous plaît dites-moi, merci!

dans cette page Impossible d'utiliser Android: arrière-plan avec le bouton des nouveaux composants matériels , l'auteur souhaite modifier le remplissage par défaut, mais je souhaite modifier le paramètre backgroundDrawable. Ce n'est donc pas un travail pour moi.

5
CnPeng

Si vous voulez une vraie Button, mais que vous puissiez modifier comme le framework Button (au lieu du MaterialButton), vous pouvez spécifier explicitement la version du framework dans votre fichier de présentation. Remplacez ceci:

<Button
    Android:id="@+id/item_popupwindows_cancel"
    ... />

avec ça:

<Android.widget.Button
    Android:id="@+id/item_popupwindows_cancel"
    ... />

Cela vous donnera ce qui est écrit sur la boîte: un Android.widget.Button, qui devrait correspondre au style que vous attendez.

De même, vous pouvez utiliser un <androidx.appcompat.widget.AppCompatButton> si vous souhaitez prendre en charge les fonctionnalités de bibliothèque mais pas les fonctionnalités de composants matériels.

4
Ben P.

Dans ce cas particulier, la LinearLayout portant votre deuxième Button semble avoir une couleur de fond blanche. Cela signifie que vous n'avez pas besoin de spécifier explicitement un fond blanc pour votre Button; vous pouvez simplement laisser l’arrière-plan de la LinearLayout apparaître.

Ceci peut être accompli en utilisant le style "Bouton de texte" de MaterialButton:

style="@style/Widget.MaterialComponents.Button.TextButton"
0
Ben P.