当前位置: 首页 > 知识库问答 >
问题:

Android主题覆盖所有颜色

归和惬
2023-03-14

我有一个XML文件,它用颜色和图案定义了应用程序的UI,但它们似乎都被themes.XML中的主题覆盖了。如何禁用此功能?

示例:

此按钮:

<Button
            android:id="@+id/capture_button"
            android:layout_width="match_parent"
            android:background="@drawable/round_button"
            android:layout_height="0dp"
            android:text="@string/capture_button_text_en"
            android:textColor="@color/white"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/camera_activity_frameLayout">
</Button>

应该具有黑色背景,因为它在round_button.xml中定义:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <solid android:color="@color/black"/>
    <corners android:radius="7dp"/>
    <stroke android:width="1dp" android:color="@color/white"/>
</shape>

然而,它是紫色,颜色来自主题:

<resources xmlns:tools="http://schemas.android.com/tools">
    <!-- Base application theme. -->
    <style name="Theme.myproject" 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>
</resources>

如何覆盖此主题?

共有1个答案

荀裕
2023-03-14

由于应用程序的主题扩展了一个Material Components主题(theme.MaterialComponents.Daynight.NoActionBar),它将接管视图膨胀,并用相应的Material Components替换一些小部件。这意味着,如果您的视图定义了一个按钮,但您得到的是一个MaterialButton。这里对此过程进行了更多的解释。

现在,要获得带有白色轮廓的黑色MaterialButton,您需要使用Widget.MaterialComponents.Button.OutlinedButton样式:

<Button
    android:id="@+id/capture_button"
    style="@style/Widget.MaterialComponents.Button.OutlinedButton"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:text="@string/capture_button_text_en"
    android:textColor="@color/white"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:shapeAppearance="@style/ShapeAppearance.MyApp.LargeComponent"
    app:backgroundTint="@color/black"
    app:strokeWidth="1dp"
    app:strokeColor="#ffffff"
    app:layout_constraintTop_toBottomOf="@+id/camera_activity_frameLayout"/>

您还需要在styles.xml中提供以下内容,以使角圆化为7DP角半径(从原始背景图中可以看到):

    <style name="ShapeAppearance.MyApp.LargeComponent" parent="ShapeAppearance.MaterialComponents.MediumComponent">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSize">7dp</item>
    </style>
 类似资料:
  • 问题内容: 我已经能够覆盖所有名称以“ android:”为前缀的主题,但是Android themes.xml还定义了似乎无法被覆盖的属性。例如: colorTheground是在Theme.Light xml中定义的,但是在此处添加它可以使我 错误。如何为整个应用程序覆盖该样式? 问题答案: 您可以用修改属性(如)的方式覆盖标准属性,只是不要忘记添加如下前缀:

  • 我们正在使用Nimbus LaF开发Swing应用程序。我们已经更改了许多Nimbus默认值(控件、文本、NimbusLightbackground等)以具有黑暗主题。 现在,我们在呈现JLists和JComboxes时遇到了很大的麻烦,因为呈现程序显然使用了NimbusLightBackground颜色作为所选文本的前景。这会导致深蓝色背景上出现深灰色文本-不好。 我曾尝试通过UIManager

  • 我知道可以将Ansible转换成pull架构:https://docs.Ansible.com/Ansible/2.4/ansible-pull.html 我遇到的麻烦是,Ansible似乎还想管理库存。因此,使用脚本提取存储库: 但在我的例子中,有很多主机,我只想对所有从存储库中提取的主机运行剧本。有没有办法做到这一点,或者我需要动态地为每个主机指定单独的脚本/清单? 编辑:我也尝试过或,但似乎

  • 对于Spring Boot2.1,默认情况下禁用bean重写,这是一件好事。 然而,我确实有一些测试,其中我使用mockito用模拟实例替换bean。在默认设置下,使用这种配置的测试将由于bean重写而失败。 我发现唯一有效的方法是通过应用程序属性启用bean重写: 但是,我真的希望确保测试配置的bean定义设置最小,这一点将由spring在禁用重写的情况下指出。 我正在重写的bean是 在导入到

  • 问题内容: 让我们来看看, 我知道如何更改ListView的样式(选择项目时为橙色): android:listSelector =“ @ drawable / xxx”和带有位图或@color的可绘制对象 关键是,为了具有一致的设计,我必须对上下文菜单执行相同的操作,但是我看不到在哪里进行更改。没有listSelector,没有任何更改。 问题答案: 如果通过上下文菜单表示长按菜单,那么我已使用

  • 我想以适当的方式使用colorPrimary和colorSecondary。 一个关于图像的好例子将对我有很大帮助。