2 votes

Quelle est l'alternative d'Android:background dans MaterialComponents ?

Question : Android:background ne donne pas d'effet dans MaterialComponents.

Dans mon projet, j'utilisais AppCompat

( <style name="DayTheme" parent="Theme.AppCompat.Light.NoActionBar"> ) et tout fonctionnait bien. Mais, en raison de certaines exigences de mon projet, je dois maintenant utiliser les MaterialComponents.

( <style name="DayTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> )

Et à cause de cela, certaines interfaces utilisateur sont mal conçues.

Problème : dans AppComapt, j'utilisais android:background="@drawable/bg_circle_btn" qui fonctionnait bien, mais dans MaterialComponents, cet arrière-plan ne donne aucun effet.

J'ai essayé de changer la couleur, la forme et tout mais ça ne donne aucun effet.

 <Button
                                android:id="@+id/custom_category_image"
                                android:layout_width="match_parent"
                                android:layout_height="25dp"
                                android:layout_alignParentTop="true"
                                android:layout_centerHorizontal="true"
                                android:background="@drawable/bg_circle_btn"
                                android:text="A"
                                android:textColor="@color/colorWhite"
                                android:textSize="12dp"
                                android:visibility="gone"
                                app:srcCompat="@drawable/ic_navigate_next_black_24dp" />

(J'utilise un bouton, parce que, au lieu d'une image fixe, je place la première lettre du titre dans ce bouton et ce bouton est en fait à l'intérieur de carview, donc il sera aussi un cercle).

bg_circle_btn :

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

    <solid android:color="?attr/toolbarcolor" />

    <size
        android:width="120dp"
        android:height="120dp" />
</shape>

Veuillez noter que, dans l'ensemble du projet, j'ai besoin d'utiliser cet arrière-plan, donc veuillez ne pas donner d'autres moyens alternatifs.

2voto

Md. Asaduzzaman Points 13121

Vous pourriez utiliser androidx.appcompat.widget.AppCompatButton au lieu de Button . Cela résoudra votre problème.

En outre, vous pouvez utiliser android:backgroundTint pour modifier uniquement la couleur.

Pour modifier les deux ( Forme&Couleur ) pour com.google.android.material.button.MaterialButton vous devez le faire à partir de votre code :

setBackgroundResource(R.drawable.bg_circle_btn) setBackgroundTintList(ColorStateList.valueOf(Color.RED))

2voto

Gabriele Mariotti Points 7243

Puisque vous utilisez le thème Material Components, <Button> est remplacé par le <com.google.android.material.button.MaterialButton> au moment de l'exécution. Il existe un auto-inflation ( vérifier ce post ).

Pour modifier la couleur de l'arrière-plan, il suffit d'utiliser la fonction app:backgroundTint attribut. Il fonctionne avec une couleur et non un dessinateur.
Quelque chose comme :

<com.google.android.material.button.MaterialButton
   app:backgroundTint="@color/...."
   ../>

Si vous souhaitez appliquer un arrière-plan personnalisé à l'écran MaterialButton :

  • vous pouvez utiliser android:background sur MaterialButton mais elle nécessite au moins la version 1.2.0-alpha06 (vérifier cette réponse )

  • utiliser un AppCompatButton comme suggéré par @Md. Asaduzzaman

-1voto

Muhammad Awais Points 125

Vous ne pouvez pas utiliser background lors de l'utilisation de l'attribut MaterialComponents thème.

Vous pouvez seulement changer sa couleur en utilisant backgroundTint attribut.

Une façon possible de réaliser votre tâche est d'utiliser View/Layout, puis de fournir un fond de forme sur celui-ci. Par exemple, en utilisant CardView, vous pouvez le faire comme suit.

Vous ne pouvez pas utiliser background en CardView mais en utilisant certains des CardView attributs utiles, vous pouvez accomplir votre tâche :

<androidx.cardview.widget.CardView
    android:layout_width="120dp"
    android:layout_height="120dp"
    app:cardBackgroundColor="@color/colorPrimary"
    app:cardCornerRadius="65dp">
    <Widget_You_Want />
</androidx.cardview.widget.CardView>

-1voto

Cameron Ketcham Points 1874

Pour un cercle rond, vous pouvez utiliser des thèmes de forme avec des composants matériels. Vous voudrez probablement définir un ShapeAppearance comme

<style name="ShapeAppearance.Round" parent="">
  <item name="cornerFamily">rounded</item>
  <item name="cornerSize">50%</item>
</style>

Ensuite, appliquez-le à votre bouton (ou style de bouton) avec app:shapeAppearance="@style/ShapeAppearance.Round"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X