android studio使用Material Design中的ToolBar

server/2025/1/12 10:39:24/

ToolBar

1.引入

androidstudio中引入androidx.appcompat.widget.Toolbar

打开你的项目的build.gradle文件,确保你已经将androidx库添加到了依赖中。如果没有添加,请添加以下代码到dependencies部分:

dependencies {

implementation("androidx.appcompat:appcompat:1.7.0")
}

可以到这里查看版本:

https://developer.android.google.cn/jetpack/androidx/releases/appcompat?hl=da 

2.同步Gradle配置(点击工具栏上的"Sync Now"按钮)。

3.在你的布局文件(XML)中,添加Toolbar组件:

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:layout_width="match_parent"android:layout_height="match_parent"><androidx.appcompat.widget.Toolbarandroid:id="@+id/toolbar"android:layout_width="match_parent"android:layout_height="?attr/actionBarSize"android:background="@color/colorPrimary"android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /></FrameLayout>

layout_height:这个属性我们非常熟悉了,但对于后面进行一下解释,?attr/actionBarSize 是一个主题属性引用,它引用了当前主题中定义的 ActionBar 的标准高度

android:theme:将 Toolbar 的主题设置为暗色主题

app:popupTheme:当我们为标题添加菜单按钮的时候按钮也会是暗色的主题,页面就会非常不和谐,因此将标题设置为淡色主题

app:navigationIcon="@drawable/icon"    左边返回图标

app:title="Title"    标题

app:titleTextColor="@color/black"    标题颜色

app:titleMarginStart="90dp"    标题离左边的距离

app:subtitle="子标题"    子标题

app:subtitleTextColor="@color/white"    子标题颜色

app:logo="@mipmap/ic_launcher"    logo,位于标题左,返回图标右

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {actionBar.setDisplayHomeAsUpEnabled(true); /*actionBar.setHomeAsUpIndicator(R.drawable.ic_launcher_foreground);*/
}

setDisplayHomeAsUpEnabled():设置了 ActionBar 的 homeAsUp 属性为 true。homeAsUp 属性的作用是让 ActionBar 的左侧显示一个向上导航的按钮(通常是一个箭头图标),点击这个按钮可以触发向上导航的行为。调用这个方法并传入 true 会启用这个按钮。如果用户点击这个按钮,它会调用 onOptionsItemSelected 方法,并传入 android.R.id.home 作为 itemId 参数。你可以在这个方法中处理点击事件,比如导航回上一个 Activity。

setHomeAsUpIndicator():就是为这个按钮设置图标,当我们不设置的时候就会使用默认的图标,运行程序,如下图所示:

尝试为左上角的导航按钮注册点击事件,使按下按钮但回到上一个活动:

@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {//android.R.id.home 是 Android 框架中定义的一个资源 ID,它代表了 ActionBar 中的“向上”或“返回首页”按钮的点击事件的IDif (item.getItemId() == android.R.id.home) {finish();return true;}return super.onOptionsItemSelected(item);
}

添加菜单

然后右击res目录→New→Directory,创建一个menu文件夹。然后右击menu文件夹→New→Menu resource file,创建一个toolbar.xml文件,并编写

<menu xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"><itemandroid:id="@+id/home"android:icon="@drawable/ic_launcher_foreground"android:title="home"app:showAsAction="always"/><itemandroid:id="@+id/find"android:icon="@drawable/ic_launcher_foreground"android:title="find"app:showAsAction="ifRoom"/><itemandroid:id="@+id/my"android:icon="@drawable/ic_launcher_foreground"android:title="my"app:showAsAction="never"/>
</menu>

通过<item>标签来定义action按钮,android:id用于指定按钮的id,android:icon用于指定按钮的图标,android:title用于指定按钮的文字
接着使用app:showAsAction来指定按钮的显示位置,showAsAction主要有以下几种值可选:

always表示永远显示在Toolbar中,如果屏幕空间不够则不显示;
ifRoom表示屏幕空间足够的情况下显示在Toolbar中,不够的话就显示在菜单当中
never表示永远显示在菜单当中
注意,Toolbar中的action按钮只会显示图标,菜单中的action按钮只会显示文字

将目录加载在Toolbar上:

@Override
public boolean onCreateOptionsMenu(Menu menu) {getMenuInflater().inflate(R.menu.toolbar, menu);return true;
}

app:showAsAction 属性可以设置的一些值及其含义:

always: 总是显示在 Toolbar 上。不论 Toolbar 上有多少其他菜单项,这个菜单项都会直接显示在 Toolbar 上
ifRoom: 如果 Toolbar 上有足够空间,就显示在 Toolbar 上。如果空间不足,它会被放置在溢出菜单(Overflow Menu)中
never: 从不直接显示在 Toolbar 上,总是位于溢出菜单中

滑动菜单

DrawerLayout

NavigationView

先给大家介绍如何将一个图片设置为圆形,首先需要添加依赖:

implementation("de.hdodenhof:circleimageview:3.1.0")

我们制定一个目录,将所有的子目录放在一个group(组)当中,为其设置属性为single

<menu xmlns:android="http://schemas.android.com/apk/res/android"><group android:checkableBehavior="single"><itemandroid:id="@+id/home1"android:icon="@drawable/ic_launcher_foreground"android:title="find"/><itemandroid:id="@+id/find1"android:icon="@drawable/ic_launcher_foreground"android:title="find"/><itemandroid:id="@+id/my1"android:icon="@drawable/ic_launcher_foreground"android:title="my"/></group></menu>

android:checkableBehavior属性补充:

None: 这是默认值。当设置为 None 时,视图可以独立地被选中或取消选中,不会影响其他具有相同 android:checkable 属性的视图。
Single: 当设置为 Single 时,如果一个视图被选中,其他所有具有相同 android:checkable 属性的视图将自动取消选中。这个行为通常用于单选按钮(RadioButton)组,确保用户在一组选项中只能选择一个。
All: 这个值实际上并不存在于 android:checkableBehavior 属性中。可能是你想要表达的是 Toggle 行为,当设置为 Toggle 时,视图会在被点击时在选中和未选中状态之间切换,这通常用于复选框(CheckBox)

为滑倒出来的布局设置一个头布局:nav_header.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:padding="10dp"android:layout_height="match_parent"><de.hdodenhof.circleimageview.CircleImageViewandroid:id="@+id/iconimg"android:layout_width="70dp"android:layout_height="70dp"android:src="@drawable/draw1"android:layout_centerInParent="true"/><TextViewandroid:id="@+id/mailtext"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:layout_alignParentBottom="true"android:layout_marginStart="10dp"android:layout_marginBottom="241dp"android:text="123456789@qq.com"android:textSize="15sp" /><TextViewandroid:id="@+id/userText"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_below="@+id/iconimg"android:layout_alignParentStart="true"android:layout_marginStart="20dp"android:layout_marginTop="153dp"android:gravity="start"android:text="自然醒"android:textSize="15sp" /></RelativeLayout>

修改活动中的布局,将之前的线性布局转换为:

<androidx.drawerlayout.widget.DrawerLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"android:id="@+id/drawer_layout"android:layout_width="match_parent"android:layout_height="match_parent"><com.google.android.material.navigation.NavigationViewandroid:id="@+id/nav_view"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="start"app:headerLayout="@layout/nav_header"app:menu="@menu/toolbar" /></androidx.drawerlayout.widget.DrawerLayout>
NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
//将一开始的选择默认设置为find1
navigationView.setCheckedItem(R.id.find1);
//注册选项的点击事件
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {@Overridepublic boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {drawrLayout.closeDrawers();return true;}
});


http://www.ppmy.cn/server/157742.html

相关文章

c++ 预备

目录 前言 一&#xff0c;知识点的补充 二&#xff0c;c语言与c 三&#xff0c;面向对象的三大特点 前言 将进入c的学习&#xff0c;接下来是对于c的预备和c的一些预习 一&#xff0c;知识点的补充 1 标识符 标识符不能为关键字 标识符只能由下划线&#xff0c;数字&#xf…

ChatGPT如何赋能办公

课程背景&#xff1a; ChatGPT近来非常火爆&#xff0c;但多数课程偏重于理论&#xff0c;我们本次讲座将以亲身实践为例&#xff0c;分享如何快速赋能办公&#xff0c;并立刻提升生产力。 课程梗概&#xff1a; 本课程旨在探究ChatGPT在办公中的应用。通过案例分析、课堂讨…

SwiftUI 导航:通过 NavigationStack 和 NavigationDestination 实现路径管理

在 SwiftUI 开发中&#xff0c;实现灵活且功能丰富的导航系统是构建优秀用户界面的关键。本文将深入解析一段 SwiftUI 代码&#xff0c;展示如何利用 NavigationStack 和枚举来实现多界面导航&#xff0c;并在不同界面之间传递参数。 代码整体概述 这段代码构建了一个具有多个…

小程序相关

1.右侧胶囊宽度&#xff0c;胶囊和文本重合问题 // #ifdef MP-WEIXIN // 获取胶囊左边界坐标 const { left } uni.getMenuButtonBoundingClientRect() this.rightSafeArea left px // #endif//给到你的内容宽度 <view :style"{max-width:rightSafeArea}"> …

C/C++ 数据结构与算法【查找】 线性表查找、树表的查找、散列表的查找详细解析【日常学习,考研必备】带图+详细代码

一、查找的基本概念 1&#xff09;在哪里找&#xff1f; 2&#xff09;什么查找&#xff1f; 3&#xff09;查找成功与否&#xff1f; 4&#xff09;查找的目的是什么&#xff1f; 5&#xff09;查找表怎么分类&#xff1f; 6&#xff09;如何评价查找算法&#xff1f; 7&…

python3GUI--大屏可视化-传染病督导平台 By:PyQt5

文章目录 一&#xff0e;前言二&#xff0e;预览三&#xff0e;软件组成&开发心得1.样式&使用方法2.左侧表格实现3.设计4.学习5.体验效果 四&#xff0e;代码分享1.环形渐变进度组件2.自定义图片的背景组件 五&#xff0e;总结 大小&#xff1a;60.9 M&#xff0c;软件…

ip归属地和手机号是一个地址吗

IP归属地和手机号是两个常被提及但本质上截然不同的概念。它们各自代表着不同的信息&#xff0c;反映了不同的技术和应用场景。本文将从定义、原理、应用场景以及两者之间的关系等方面&#xff0c;详细探讨IP归属地和手机号是否是一个地址的问题。 一、IP归属地和手机号的定义 …

世优波塔数字人 AI 大屏再升级:让智能展厅讲解触手可及

近日&#xff0c;世优波塔大屏AI数字人再度升级&#xff0c;将数字人技术与大屏交互推向了新的高度&#xff0c;为用户带来了全方位的卓越体验&#xff0c;让人工智能不断重塑我们的生活与工作方式。 新形象&#xff1a;数字人的独特魅力 高精度的数字人形象一直是波塔智能体…