【问题标题】:Drawable does not apply formatting to my buttonDrawable 不会对我的按钮应用格式
【发布时间】:2019-11-03 18:26:34
【问题描述】:

我有这个 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>

【问题讨论】:

    标签: android drawable android-button material-components material-components-android


    【解决方案1】:

    如果您使用的是 Material 主题,则会启用 自动膨胀,它将在运行时将 &lt;Button&gt; 替换为 &lt;com.google.android.material.button.MaterialButton&gt;
    还要检查这个question

    只需使用 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"/>
    

    【讨论】:

      【解决方案2】:

      您使用的是 Material Components 主题吗?如果是这样,您的&lt;Button&gt; 标签将被夸大为com.google.android.material.button.MaterialButtonThe documentation 这个小部件状态:

      不要使用android:background 属性。 MaterialButton 管理自己的背景可绘制对象,设置新背景意味着 MaterialButton 无法再保证它引入的新属性能够正常工作。

      如果您不想要特殊的 MaterialButton 行为,您可以显式指定要使用的不同按钮类。将您的 &lt;Button&gt; 标签改为:

      <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" /
      

      【讨论】:

      • 这也是一个有效的答案,我没有意识到这部分文档,我还是个初学者。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2013-07-25
      • 2021-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多