文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android中实现Material3主题

2023-10-02 15:06

关注

Android中实现Material3主题

Material 3是由Google引入的一种设计系统,通过采用一套设计原则、指南和组件,提供统一直观的用户体验。

在本篇文章中,您将学习如何:

开始

首先需要引入material组件以来:

dependencies {    // ...    implementation 'com.google.android.material:material:1.9.0'}

创建material3主题theme.xml

<style name="Theme.MyAppTheme" parent="Theme.Material3.Light">   <item name="colorPrimary">@color/green</item>   <item name="colorPrimaryVariant">@color/green_dark</item>   <item name="colorOnPrimary">@color/white</item></style>

我们可以通过将它们添加到我们刚创建的主题中,来更改默认颜色的值。在这里,您可以查看 Material 3 的所有角色并决定要覆盖哪种颜色。

https://github.com/material-components/material-components-android/blob/master/docs/theming/Color.md

请注意,所有 Material 3 组件都使用 Material 3 样式,因此如果我们更改主题值,我们的视图将自动受到影响。

应用

AndroidManifest.xml中引入theme

<application    android:allowBackup="true"    android:dataExtractionRules="@xml/data_extraction_rules"    android:fullBackupContent="@xml/backup_rules"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"    android:roundIcon="@mipmap/ic_launcher_round"    android:supportsRtl="true"    android:theme="@style/Theme.MyAppTheme"> // change here    <activity        android:name=".MainActivity"        android:exported="true">        <intent-filter>            <action android:name="android.intent.action.MAIN" />            <category android:name="android.intent.category.LAUNCHER" />        </intent-filter>    </activity></application>

下面是主界面布局activity_main.xml,看看效果

<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:id="@+id/container"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingBottom="@dimen/activity_vertical_margin"    tools:context=".MainActivity">    <EditText        android:id="@+id/username"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="96dp"        android:autofillHints="@string/prompt_email"        android:hint="@string/prompt_email"        android:inputType="textEmailAddress"        android:selectAllOnFocus="true"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toTopOf="parent" />    <EditText        android:id="@+id/password"        android:layout_width="0dp"        android:layout_height="wrap_content"        android:layout_marginTop="8dp"        android:autofillHints="@string/prompt_password"        android:hint="@string/prompt_password"        android:imeActionLabel="@string/action_sign_in_short"        android:imeOptions="actionDone"        android:inputType="textPassword"        android:selectAllOnFocus="true"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/username" />    <Button        android:id="@+id/login"        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:layout_gravity="start"        android:layout_marginTop="16dp"        android:layout_marginBottom="64dp"        android:text="@string/action_sign_in"        app:layout_constraintBottom_toBottomOf="parent"        app:layout_constraintEnd_toEndOf="parent"        app:layout_constraintStart_toStartOf="parent"        app:layout_constraintTop_toBottomOf="@+id/password"        app:layout_constraintVertical_bias="0.2" />androidx.constraintlayout.widget.ConstraintLayout>


请注意,工具栏、按钮和文本的颜色已经改变,现在都使用了我们在Theme.MyAppTheme中定义的相同的绿色。

但是,如果我们能以简单和和谐的方式定义所有Material 3主题的值会怎样呢?这就是Material 3主题创建工具发挥作用的地方。

https://m3.material.io/theme-builder#/custom
主题生成工具
我们可以定义我们想要在应用程序中使用的颜色,并且该工具将使用算法创建一个和谐的主题,以确保主要颜色的完美对比。现在,我们所需要做的就是将主题导出为“Android视图(XML)”。

该工具将导出适用于浅色和深色主题的值,包括所有的颜色。

theme.xml(浅色主题)

<resources>    <style name="Theme.MyAppTheme" parent="Theme.Material3.Light.NoActionBar">        "colorPrimary">@color/md_theme_light_primary        "colorOnPrimary">@color/md_theme_light_onPrimary        "colorPrimaryContainer">@color/md_theme_light_primaryContainer        "colorOnPrimaryContainer">@color/md_theme_light_onPrimaryContainer        "colorSecondary">@color/md_theme_light_secondary        "colorOnSecondary">@color/md_theme_light_onSecondary        "colorSecondaryContainer">@color/md_theme_light_secondaryContainer        "colorOnSecondaryContainer">@color/md_theme_light_onSecondaryContainer              style>resources>

colors.xml

<resources>    <color name="seed">#6750A4color>    <color name="md_theme_light_primary">#6750A4color>    <color name="md_theme_light_onPrimary">#FFFFFFcolor>    <color name="md_theme_light_primaryContainer">#EADDFFcolor>    <color name="md_theme_light_onPrimaryContainer">#21005Dcolor>    <color name="md_theme_light_secondary">#625B71color>    <color name="md_theme_light_onSecondary">#FFFFFFcolor>    <color name="md_theme_light_secondaryContainer">#E8DEF8color>      <! -- [...] a lot of colors here -->resources>

现在app UI效果如下所示:

如果你想更改button的颜色,非常简单

应用动态着色

通过在我们的应用程序类中简单地添加以下行,我们可以根据用户的系统定义的颜色动态更改应用程序的颜色:
MyApplication.kt

class MyApplication : Application() {    override fun onCreate() {        super.onCreate()        DynamicColors.applyToActivitiesIfAvailable(this)    }}

AndroidManifest.xml

<application    android:allowBackup="true"    android:dataExtractionRules="@xml/data_extraction_rules"    android:fullBackupContent="@xml/backup_rules"    android:icon="@mipmap/ic_launcher"    android:label="@string/app_name"    android:roundIcon="@mipmap/ic_launcher_round"    android:supportsRtl="true"    android:name=".MyApplication"     android:theme="@style/Theme.MyAppTheme"> 

以上就是本文全部内容,希望对你学习material3主题有所帮助!

来源地址:https://blog.csdn.net/u011897062/article/details/131451374

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-移动开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯