Button 的背景颜色是由 colorPrimary 而非 colorAccent 着色的吗?
Is Button's background colored by colorPrimary, not colorAccent?
我的设置:minSdkVersion 19 && compileSdkVersion 30
我试过下面的代码。我希望按钮的背景颜色为 colorAccent
,但实际颜色为 colorPrimary
。当我将 colorPrimary
值更改为另一种颜色时,按钮的背景颜色会相应改变。
这与我学到的相反。 (当样式为“@style/Widget.AppCompat.Button.Colored”时,按钮的背景颜色应为 colorAccent
)。我在遵循 Google Android 基础教程 (https://developer.android.com/codelabs/kotlin-android-training-interactivity/index.html#4) 时遇到了这个问题。
我很困惑,请帮忙。
// activity_main.xml
<Button
style="@style/Widget.AppCompat.Button.Colored"
android:id="@+id/done_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/done" />
// themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.AboutMe" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
// colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="colorAccent">#880000</color>
</resources>
我注意到按钮颜色也设置为默认主色而不是强调色,但是
您可以通过设置按钮的 android:backgroundTint 属性而不是 style-
来修复它
<Button
android:id="@+id/btn"
android:gravity="center"
android:text="Button"
android:backgroundTint="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
由于您使用的是 Material 组件主题,因此您的 Button
在运行时被 MaterialButton
替换。
MaterialButton
使用 ?attr/colorPrimary
作为背景色。
样式 Widget.AppCompat.Button.Colored
应用背景可绘制对象,它被 MaterialButton
提供的 MaterialShapeDrawable
覆盖。
在 Button
中使用 Material 组件样式作为 Widget.MaterialComponents.Button
和 app:backgroundTint
在背景中应用不同的颜色:
<Button
style="@style/Widget.MaterialComponents.Button"
app:backgroundTint="@color/....."
../>
或:
<Button
style="@style/Widget.MaterialComponents.Button"
android:theme="@style/ButtonThemeOverlayPrimaryColor"
../>
<style name="ButtonThemeOverlayPrimaryColor">
<item name="colorPrimary">@color/....</item>
</style>
或者如果您想使用 AppCompat
样式,请使用 AppCompatButton
.
<androidx.appcompat.widget.AppCompatButton
style="@style/Widget.AppCompat.Button.Colored"/>
我的设置:minSdkVersion 19 && compileSdkVersion 30
我试过下面的代码。我希望按钮的背景颜色为 colorAccent
,但实际颜色为 colorPrimary
。当我将 colorPrimary
值更改为另一种颜色时,按钮的背景颜色会相应改变。
这与我学到的相反。 (当样式为“@style/Widget.AppCompat.Button.Colored”时,按钮的背景颜色应为 colorAccent
)。我在遵循 Google Android 基础教程 (https://developer.android.com/codelabs/kotlin-android-training-interactivity/index.html#4) 时遇到了这个问题。
我很困惑,请帮忙。
// activity_main.xml
<Button
style="@style/Widget.AppCompat.Button.Colored"
android:id="@+id/done_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/done" />
// themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.AboutMe" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<!-- Primary brand color. -->
<item name="colorPrimary">@color/purple_500</item>
<item name="colorPrimaryVariant">@color/purple_700</item>
<item name="colorOnPrimary">@color/white</item>
<!-- Secondary brand color. -->
<item name="colorSecondary">@color/teal_200</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<!-- Status bar color. -->
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
<!-- Customize your theme here. -->
<item name="colorAccent">@color/colorAccent</item>
</style>
</resources>
// colors.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="colorAccent">#880000</color>
</resources>
我注意到按钮颜色也设置为默认主色而不是强调色,但是 您可以通过设置按钮的 android:backgroundTint 属性而不是 style-
来修复它<Button
android:id="@+id/btn"
android:gravity="center"
android:text="Button"
android:backgroundTint="@color/colorAccent"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
由于您使用的是 Material 组件主题,因此您的 Button
在运行时被 MaterialButton
替换。
MaterialButton
使用 ?attr/colorPrimary
作为背景色。
样式 Widget.AppCompat.Button.Colored
应用背景可绘制对象,它被 MaterialButton
提供的 MaterialShapeDrawable
覆盖。
在 Button
中使用 Material 组件样式作为 Widget.MaterialComponents.Button
和 app:backgroundTint
在背景中应用不同的颜色:
<Button
style="@style/Widget.MaterialComponents.Button"
app:backgroundTint="@color/....."
../>
或:
<Button
style="@style/Widget.MaterialComponents.Button"
android:theme="@style/ButtonThemeOverlayPrimaryColor"
../>
<style name="ButtonThemeOverlayPrimaryColor">
<item name="colorPrimary">@color/....</item>
</style>
或者如果您想使用 AppCompat
样式,请使用 AppCompatButton
.
<androidx.appcompat.widget.AppCompatButton
style="@style/Widget.AppCompat.Button.Colored"/>