无法使用主题更改按钮的“android:textColor”
Can't change `android:textColor` for a button using a theme
您好,我有一个简单的 android 应用程序,其中有一个按钮。这是我的应用程序的默认主题:themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.BaseAppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- 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. -->
</style>
<style name="Theme.WalkTest" parent="Theme.BaseAppTheme">
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
在一个单独的文件中,button.xml
我已经为我的按钮定义了主题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.WalkTest.ButtonSecondary" parent="Theme.WalkTest">
<item name="android:backgroundTint">@android:color/holo_green_dark</item>
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
这是我片段中的按钮:fragment_buildings.xml
(我正在使用导航)。
<Button
android:id="@+id/create_building_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
android:drawableLeft="@drawable/ic_add"
android:paddingLeft="15dp"
android:paddingTop="20dp"
android:paddingRight="15dp"
android:paddingBottom="20dp"
android:text="@string/new_building"
android:textAlignment="textStart"
android:theme="@style/Theme.WalkTest.ButtonSecondary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
这里是 android 工作室的预览:
我可以看到后台更改正在运行,但是 textColor
似乎没有更改?
我可以使用按钮元素上的属性来改变它的颜色,但我想要可重用的样式。
这是我的 Android Studio 版本:
Android Studio 4.1
Build #AI-201.8743.12.41.6858069, built on September 23, 2020
Runtime version: 1.8.0_242-release-1644-b3-6222593 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.7
GC: ParNew, ConcurrentMarkSweep
Memory: 2014M
Cores: 4
Registry: ide.new.welcome.screen.force=true
Non-Bundled Plugins: IdeaVIM, org.jetbrains.kotlin
使用
style = "@style/Theme.WalkTest.ButtonSecondary"
而不是
android:theme="@style/Theme.WalkTest.ButtonSecondary"
首先,在 values/styles 中定义您的样式。xml
示例:
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<style name="text_h3">
<item name="android:textSize">14sp</item>
<item name="android:textColor">@color/colorPrimary</item>
<item name="android:fontFamily">@font/font_medium</item>
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
</resource>
其次,为所需的视图使用定义的样式,
示例:
<TextView
android:id="@+id/tv_name_label"
style="@style/text_h3"
...
</TextView>
这是继续进行造型的正确方法之一,希望对您有所帮助。
您好,我有一个简单的 android 应用程序,其中有一个按钮。这是我的应用程序的默认主题:themes.xml
<resources xmlns:tools="http://schemas.android.com/tools">
<!-- Base application theme. -->
<style name="Theme.BaseAppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- 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. -->
</style>
<style name="Theme.WalkTest" parent="Theme.BaseAppTheme">
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
在一个单独的文件中,button.xml
我已经为我的按钮定义了主题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.WalkTest.ButtonSecondary" parent="Theme.WalkTest">
<item name="android:backgroundTint">@android:color/holo_green_dark</item>
<item name="android:textColor">@android:color/black</item>
</style>
</resources>
这是我片段中的按钮:fragment_buildings.xml
(我正在使用导航)。
<Button
android:id="@+id/create_building_button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="10dp"
android:drawableLeft="@drawable/ic_add"
android:paddingLeft="15dp"
android:paddingTop="20dp"
android:paddingRight="15dp"
android:paddingBottom="20dp"
android:text="@string/new_building"
android:textAlignment="textStart"
android:theme="@style/Theme.WalkTest.ButtonSecondary"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/toolbar" />
这里是 android 工作室的预览:
我可以看到后台更改正在运行,但是 textColor
似乎没有更改?
我可以使用按钮元素上的属性来改变它的颜色,但我想要可重用的样式。
这是我的 Android Studio 版本:
Android Studio 4.1
Build #AI-201.8743.12.41.6858069, built on September 23, 2020
Runtime version: 1.8.0_242-release-1644-b3-6222593 x86_64
VM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
macOS 10.15.7
GC: ParNew, ConcurrentMarkSweep
Memory: 2014M
Cores: 4
Registry: ide.new.welcome.screen.force=true
Non-Bundled Plugins: IdeaVIM, org.jetbrains.kotlin
使用
style = "@style/Theme.WalkTest.ButtonSecondary"
而不是
android:theme="@style/Theme.WalkTest.ButtonSecondary"
首先,在 values/styles 中定义您的样式。xml
示例:
<resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<style name="text_h3">
<item name="android:textSize">14sp</item>
<item name="android:textColor">@color/colorPrimary</item>
<item name="android:fontFamily">@font/font_medium</item>
<item name="android:clickable">true</item>
<item name="android:focusable">true</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
</style>
</resource>
其次,为所需的视图使用定义的样式,
示例:
<TextView
android:id="@+id/tv_name_label"
style="@style/text_h3"
...
</TextView>
这是继续进行造型的正确方法之一,希望对您有所帮助。