material-components / material-components/material-components-android
[MaterialButton] Why Button rendering one more layer than TextView?
Nessuno ha ancora preso questa issue.
- Lingua principale
- Java
- Stelle
- 17.4k
- Fork
- 3.2k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Descrizione
Description: Sorry, maybe it's not a bug, I just don't understand and couldn't find any clue to explain it.
I wrote a demo to illuminate it.

According to Official Site, here's the result.
| Top => Bottom | Behavior |
|---|---|
OutlinedButton ( background = TRANSPARENT ) |
Blue - Overdrawn 1 time |
TextButton ( background = TRANSPARENT ) |
Blue - Overdrawn 1 time |
TextView |
No overdraw |
So
- What causes this?
- Is there any way to avoid this overdraw?
Source code:
<com.google.android.material.button.MaterialButton
android:id="@+id/btn"
style="@style/Widget.MaterialComponents.Button.OutlinedButton"
android:layout_width="wrap_content"
android:background="@android:color/transparent"
android:layout_height="wrap_content"
android:layout_marginTop="30dp"
android:text="@string/app_name"
android:textAllCaps="false"
app:iconPadding="0dp"
app:iconSize="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn2"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:background="@android:color/transparent"
android:checkable="true"
android:text="@string/app_name"
android:textAllCaps="false"
android:textColor="@android:color/white"
app:iconPadding="0dp"
app:iconSize="0dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn" />
<TextView
android:id="@+id/btn3"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="8dp"
android:text="@string/app_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btn2" />
Android API version: compileSdk 31
Material Library version: com.google.android.material:material:1.6.1
Device: Google Pixel 3 - Android 12
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Inizia riproducendo la demo segnalata con Material Components 1.6.1 su Android 12/API 31, confrontando i due stili di MaterialButton con il TextView mentre la visualizzazione del GPU overdraw è abilitata. Esamina l'XML fornito e determina cosa causa il livello aggiuntivo e se la configurazione con sfondo trasparente può evitarlo; il lavoro è completato quando sono documentati la causa e un workaround supportato, se ne esiste uno.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- android
- Ambito
- mobile
- Tipo di issue
- Bug
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 25/100