Drawable не применяет форматирование к моей кнопке

У меня есть этот Drawable, стремящийся сделать мою круглую кнопку:

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

Звоню ему на фоне своей кнопки нормально...

<Button
        android:id="@+id/btnPhoto"
        android:background="@drawable/bg_btn_rounded"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="42dp"
        android:layout_marginEnd="8dp"
        android:text="@string/btnphoto"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

Но к компоненту не применяются никакие изменения, я пытался использовать Drawable на других компонентах, и он не применяется ... Я понятия не имею, почему это происходит.

Мой полный экран:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.misael.appchat.RegisterActivity">

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/tUsername"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="0dp"
        android:layout_height="80dp"
        android:layout_marginStart="16dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="16dp"
        android:hint="@string/usernameHint"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.0"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/btnPhoto">


        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/editUsername"
            android:layout_width="match_parent"
            android:layout_height="68dp" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/tEmail"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="0dp"
        android:layout_height="80dp"
        android:layout_marginTop="24dp"
        android:hint="@string/loginHint"
        app:layout_constraintEnd_toEndOf="@+id/tUsername"
        app:layout_constraintStart_toStartOf="@+id/tUsername"
        app:layout_constraintTop_toBottomOf="@+id/tUsername">


        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/editEmail"
            android:layout_width="match_parent"
            android:layout_height="68dp" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.textfield.TextInputLayout
        android:id="@+id/tSenha"
        style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
        android:layout_width="0dp"
        android:layout_height="80dp"
        android:layout_marginTop="24dp"
        android:hint="@string/passwordHint"
        app:layout_constraintEnd_toEndOf="@+id/tEmail"
        app:layout_constraintStart_toStartOf="@+id/tEmail"
        app:layout_constraintTop_toBottomOf="@+id/tEmail">


        <com.google.android.material.textfield.TextInputEditText
            android:id="@+id/editPassword"
            android:layout_width="match_parent"
            android:layout_height="68dp"
            android:inputType="textPassword" />

    </com.google.android.material.textfield.TextInputLayout>

    <com.google.android.material.button.MaterialButton
        android:id="@+id/btnRegister"
        style="@style/Widget.MaterialComponents.Button.OutlinedButton"
        android:layout_width="0dp"
        android:layout_height="58dp"
        android:layout_marginTop="32dp"
        android:text="@string/signinButton"
        android:textColor="#7517bd"
        app:layout_constraintEnd_toEndOf="@+id/tSenha"
        app:layout_constraintStart_toStartOf="@+id/tSenha"
        app:layout_constraintTop_toBottomOf="@+id/tSenha" />

    <Button
        android:id="@+id/btnPhoto"
        android:background="@drawable/bg_btn_rounded"
        android:layout_width="150dp"
        android:layout_height="150dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="42dp"
        android:layout_marginEnd="8dp"
        android:text="@string/btnphoto"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

person Misael Brunoro Liberato    schedule 03.11.2019    source источник


Ответы (2)


Если вы используете материальную тему, включена автоматическая инфляция, которая заменит <Button> на <com.google.android.material.button.MaterialButton> во время выполнения.
Также проверьте это вопрос.

Просто используйте атрибут app:backgroundTint для определения цвета фона и app:cornerRadius для определения радиуса угла.

Что-то типа:

<com.google.android.material.button.MaterialButton
    android:id="@+id/btnPhoto"
    app:backgroundTint="@color/primaryLightColor"
    app:cornerRadius="150dp"
    android:layout_width="150dp"
    android:layout_height="150dp"/>

введите здесь описание изображения

person Gabriele Mariotti    schedule 03.11.2019

Вы используете тему Material Components? Если это так, ваш тег <Button> будет увеличен как com.google.android.material.button.MaterialButton. В в документации для этого виджета указано:

Не используйте атрибут android:background. MaterialButton управляет своим собственным отрисовываемым фоном, и установка нового фона означает, что MaterialButton больше не может гарантировать, что новые атрибуты, которые он вводит, будут работать должным образом.

Если вам не нужно специальное поведение MaterialButton, вы можете явно указать другой класс кнопки для использования. Вместо этого измените свой тег <Button> на это:

<androidx.appcompat.widget.AppCompatButton
    android:id="@+id/btnPhoto"
    android:background="@drawable/bg_btn_rounded"
    android:layout_width="150dp"
    android:layout_height="150dp"
    android:layout_marginStart="8dp"
    android:layout_marginTop="42dp"
    android:layout_marginEnd="8dp"
    android:text="@string/btnphoto"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent" /
person Ben P.    schedule 03.11.2019
comment
Это также правильный ответ, я не понял эту часть документации, я все еще новичок. - person Misael Brunoro Liberato; 03.11.2019