深色主题中的 TextButton 默认颜色
TextButton default color in dark theme
尝试更改我的 Android 应用程序中所有 TextButtons 的默认颜色 material。我看到我可以设置“materialButtonStyle”和“materialButtonOutlinedStyle”的样式。但是我没有看到文本按钮的属性,可能类似于“materialButtonTextStyle”
<style name="AppTheme" parent="Theme.MaterialComponents">
<item name="materialButtonStyle">@style/myButton</item>
<item name="materialButtonOutlinedStyle">@style/myButtonOutlined</item>
</style>
示例按钮:
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:text="Text Button" />
是否可以全局更改所有 material 个文本按钮的样式?
编辑: 从主题按钮 material 文档中尝试了这个。
<style name="AppTheme" parent="Theme.MaterialComponents">
<item name="borderlessButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<style name="Widget.App.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.TextButton</item>
</style>
<style name="ThemeOverlay.App.Button.TextButton" parent="">
<item name="colorPrimary">@color/md_purple_600</item>
</style>
但是仍然没有为所有文本按钮设置文本颜色样式。
正如您在 textButtonColors
, TextButton 中看到的那样,使用 MaterialTheme
的原色作为默认内容颜色。
@Composable
fun textButtonColors(
backgroundColor: Color = Color.Transparent,
contentColor: Color = MaterialTheme.colors.primary,
disabledContentColor: Color = MaterialTheme.colors.onSurface
.copy(alpha = ContentAlpha.disabled)
): ButtonColors = DefaultButtonColors(
backgroundColor = backgroundColor,
contentColor = contentColor,
disabledBackgroundColor = backgroundColor,
disabledContentColor = disabledContentColor
)
为了实现您的目标,如果您不更改主色,您可以定义自定义主题并覆盖文本按钮的样式。
@Composable
fun CustomTextButtonStyle(content: @Composable () -> Unit) {
MaterialTheme(
colors = MaterialTheme.colors.copy(
primary = Color.Green // Set your custom color
)
) {
content()
}
}
CustomTextButtonStyle() {
TextButton(onClick = { }) {
Text(text = "Hello")
}
}
在标题中它说你想为深色主题定义 textColor。您是否在 values-night
中定义了主题,因此如果 phone 处于深色模式,您的应用程序将采用这些值。
根据 Buttons -Material design 文档,TextButton
有一个默认的样式主题属性 ?attr/borderlessButtonStyle
,可以在 AppTheme 中使用它来全局更改所有 material 的样式文本按钮。
要全局更改所有 TextButton 的文本颜色:
1.Define Light and Night AppTheme 中的 borderlessButtonStyle
属性如下所示:
<!-- Base application theme. -->
<style name="MyAppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="borderlessButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<!-- For TextButton-->
<style name="Widget.App.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.TextButton</item>
</style>
<style name="ThemeOverlay.App.Button.TextButton" parent="">
<item name="colorPrimary">@android:color/holo_red_dark</item>
</style>
2.In 每个 TextButton xml 布局定义样式 style="?attr/borderlessButtonStyle"
如下所示:
<Button
style="?attr/borderlessButtonStyle"
android:id="@+id/text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Button" />
并且文本颜色将根据 Light/Night 主题中定义的 colorPrimary
进行全局更改。
按照相同的方式,您可以为其他 Material 按钮样式实现相同的效果,例如 OutlinedButton
和默认的 Button
,例如:
<!-- Base application theme. -->
<style name="MyAppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="borderlessButtonStyle">@style/Widget.App.Button.TextButton</item>
<item name="materialButtonOutlinedStyle">@style/Widget.App.Button.OutlinedButton</item>
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
<!-- For TextButton-->
<style name="Widget.App.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.TextButton</item>
</style>
<style name="ThemeOverlay.App.Button.TextButton" parent="">
<item name="colorPrimary">@android:color/holo_red_dark</item>
</style>
<!-- For OutlinedButton-->
<style name="Widget.App.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.OutlinedButton</item>
</style>
<style name="ThemeOverlay.App.Button.OutlinedButton" parent="">
<item name="colorPrimary">@android:color/holo_orange_dark</item>
</style>
<!-- For Button -->
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button</item>
</style>
<style name="ThemeOverlay.App.Button" parent="">
<item name="colorPrimary">@android:color/holo_blue_dark</item>
<item name="colorOnPrimary">@android:color/holo_blue_bright</item>
</style>
并且每个Button
监听上面的全局属性:
<Button
style="?attr/borderlessButtonStyle"
android:id="@+id/text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Button" />
<Button
style="?attr/materialButtonOutlinedStyle"
android:id="@+id/outlined_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Outlined Button" />
<Button
android:id="@+id/default_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Default Button" />
以下是浅色模式下每种按钮样式的示例结果:
下面是夜间模式下每种按钮样式的示例结果:
尝试更改我的 Android 应用程序中所有 TextButtons 的默认颜色 material。我看到我可以设置“materialButtonStyle”和“materialButtonOutlinedStyle”的样式。但是我没有看到文本按钮的属性,可能类似于“materialButtonTextStyle”
<style name="AppTheme" parent="Theme.MaterialComponents">
<item name="materialButtonStyle">@style/myButton</item>
<item name="materialButtonOutlinedStyle">@style/myButtonOutlined</item>
</style>
示例按钮:
<Button
android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Widget.MaterialComponents.Button.TextButton"
android:text="Text Button" />
是否可以全局更改所有 material 个文本按钮的样式?
编辑: 从主题按钮 material 文档中尝试了这个。
<style name="AppTheme" parent="Theme.MaterialComponents">
<item name="borderlessButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<style name="Widget.App.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.TextButton</item>
</style>
<style name="ThemeOverlay.App.Button.TextButton" parent="">
<item name="colorPrimary">@color/md_purple_600</item>
</style>
但是仍然没有为所有文本按钮设置文本颜色样式。
正如您在 textButtonColors
, TextButton 中看到的那样,使用 MaterialTheme
的原色作为默认内容颜色。
@Composable
fun textButtonColors(
backgroundColor: Color = Color.Transparent,
contentColor: Color = MaterialTheme.colors.primary,
disabledContentColor: Color = MaterialTheme.colors.onSurface
.copy(alpha = ContentAlpha.disabled)
): ButtonColors = DefaultButtonColors(
backgroundColor = backgroundColor,
contentColor = contentColor,
disabledBackgroundColor = backgroundColor,
disabledContentColor = disabledContentColor
)
为了实现您的目标,如果您不更改主色,您可以定义自定义主题并覆盖文本按钮的样式。
@Composable
fun CustomTextButtonStyle(content: @Composable () -> Unit) {
MaterialTheme(
colors = MaterialTheme.colors.copy(
primary = Color.Green // Set your custom color
)
) {
content()
}
}
CustomTextButtonStyle() {
TextButton(onClick = { }) {
Text(text = "Hello")
}
}
在标题中它说你想为深色主题定义 textColor。您是否在 values-night
中定义了主题,因此如果 phone 处于深色模式,您的应用程序将采用这些值。
根据 Buttons -Material design 文档,TextButton
有一个默认的样式主题属性 ?attr/borderlessButtonStyle
,可以在 AppTheme 中使用它来全局更改所有 material 的样式文本按钮。
要全局更改所有 TextButton 的文本颜色:
1.Define Light and Night AppTheme 中的 borderlessButtonStyle
属性如下所示:
<!-- Base application theme. -->
<style name="MyAppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="borderlessButtonStyle">@style/Widget.App.Button.TextButton</item>
</style>
<!-- For TextButton-->
<style name="Widget.App.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.TextButton</item>
</style>
<style name="ThemeOverlay.App.Button.TextButton" parent="">
<item name="colorPrimary">@android:color/holo_red_dark</item>
</style>
2.In 每个 TextButton xml 布局定义样式 style="?attr/borderlessButtonStyle"
如下所示:
<Button
style="?attr/borderlessButtonStyle"
android:id="@+id/text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Button" />
并且文本颜色将根据 Light/Night 主题中定义的 colorPrimary
进行全局更改。
按照相同的方式,您可以为其他 Material 按钮样式实现相同的效果,例如 OutlinedButton
和默认的 Button
,例如:
<!-- Base application theme. -->
<style name="MyAppTheme" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
<item name="borderlessButtonStyle">@style/Widget.App.Button.TextButton</item>
<item name="materialButtonOutlinedStyle">@style/Widget.App.Button.OutlinedButton</item>
<item name="materialButtonStyle">@style/Widget.App.Button</item>
</style>
<!-- For TextButton-->
<style name="Widget.App.Button.TextButton" parent="Widget.MaterialComponents.Button.TextButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.TextButton</item>
</style>
<style name="ThemeOverlay.App.Button.TextButton" parent="">
<item name="colorPrimary">@android:color/holo_red_dark</item>
</style>
<!-- For OutlinedButton-->
<style name="Widget.App.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button.OutlinedButton</item>
</style>
<style name="ThemeOverlay.App.Button.OutlinedButton" parent="">
<item name="colorPrimary">@android:color/holo_orange_dark</item>
</style>
<!-- For Button -->
<style name="Widget.App.Button" parent="Widget.MaterialComponents.Button">
<item name="materialThemeOverlay">@style/ThemeOverlay.App.Button</item>
</style>
<style name="ThemeOverlay.App.Button" parent="">
<item name="colorPrimary">@android:color/holo_blue_dark</item>
<item name="colorOnPrimary">@android:color/holo_blue_bright</item>
</style>
并且每个Button
监听上面的全局属性:
<Button
style="?attr/borderlessButtonStyle"
android:id="@+id/text_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Text Button" />
<Button
style="?attr/materialButtonOutlinedStyle"
android:id="@+id/outlined_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Outlined Button" />
<Button
android:id="@+id/default_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Default Button" />
以下是浅色模式下每种按钮样式的示例结果:
下面是夜间模式下每种按钮样式的示例结果: