3 votes

Pourquoi le style de mon bouton créé par programme est-il différent ?

En commençant par un nouveau projet dans Android Studio avec une activité vide, j'ajoute une mise en page linéaire avec un seul bouton dans la section activity_main.xml :

<LinearLayout
    android:id="@+id/buttons"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:orientation="vertical">
    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Demo01" />
</LinearLayout>

alors dans mon MainActivity j'ajoute un deuxième bouton de manière programmatique :

val buttonsLayout = findViewById<LinearLayout>(R.id.buttons)
val button = Button(this)
button.layoutParams = ViewGroup.LayoutParams(
    ViewGroup.LayoutParams.WRAP_CONTENT,
    ActionBar.LayoutParams.WRAP_CONTENT
)
button.text = "Demo 01"
buttonsLayout.addView(button)

Finalement, quand je lance cette application, je vois ceci :

buttons with different colors

Le premier et le deuxième boutons semblent avoir des styles différents.

Pourquoi sont-ils différents ? En outre, quelle est la bonne façon de créer par programme de nouvelles vues pour que les vues créées par programme aient le même style que leurs homologues en format xml ?

3voto

Gabriele Mariotti Points 7243

Ils sont différents parce que vous utilisez un Theme.MaterialComponents.* thème.
Avec ce thème, l Button défini dans la mise en page est remplacés au moment de l'exécution par un MaterialButton .

Pour avoir le même bouton, vous devez utiliser :

    val buttonsLayout = findViewById<LinearLayout>(R.id.buttons)
    val button = MaterialButton(this)
    //...
    button.text = "Demo01"
    buttonsLayout.addView(button)

enter image description here

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