Android---Toolbar

news2024/11/26 2:44:35

    

目录

Toolbar

Toolbar 加上 menu

 Toolbar 设置 Theme

完整 Demo

Toolbar

        Toolbar 是在 Android 5.0 开始推出的一个 Materal Design 风格的导航控件 ,Google 非常推荐大家使用 Toobar 来作为 Android 客户端的导航栏,以此来取代之前的 Actionbar。与 Actionbar 相比,Toolbar 明显要灵活的多。它不像 Actionbar 一样,一定要固定在 Activity 的顶部,而是可以放到界面的任意位置。

注意:在使用 Toolbar 时,整个 App 的 Theme 必须是 NoActionBar, 不然应用会出错。

        除此之外,在设计 Toolbar 的时候,Google 也留给了开发者很多可定制修改的余地,这些可定制修改的属性在 API 文档中都有详细介绍,如:

     \bullet 设置导航栏图标;

     \bullet  设置 APP 的logo;

     \bullet 支持设置标题合子标题;

     \bullet 支持 Action Menu;

在布局文件中的属性:

     \bullet app:navigationIcon 设置 navigation button

app:navigationIcon="@mipmap/back_icon"

         

     \bullet app:logo 设置 logo 图标

app:logo="@drawable/ic_tool_logo"

 

     \bullet app:title 设置标题(正标题)

     \bullet app:titleTextColor 设置正标题文字颜色

     \bullet app:subtitle 设置副标题

     \bullet app:subtitleTextColor 设置副标题文字颜色

     \bullet app:theme 主题

     \bullet app:popupTheme 设置点击右上角''..." 的主题,改变 UI 展示效果

app:popupTheme="@style/ToolBarPopupTheme"

TollBarPopupTheme 内容如下。放在了 values --> Thems --> Themes.xml 里。

<!-- 设置”...“ 点击时的主题(即右上角的那个menu) -->
    <style name="ToolBarPopupTheme" parent="ThemeOverlay.AppCompat.Light">
        <item name="android:colorBackground">#616161</item><!--设置背景颜色的-->
        <item name="android:textColorPrimary">@android:color/white</item><!--设置文字颜色的-->
        <item name="android:textSize">16sp</item><!--设置文字大小的-->
        <item name="actionOverflowMenuStyle">@style/OverflowMenuTheme</item><!--设置弹出位置的主题-->
        <item name="android:paddingEnd">-5dp</item><!--设置点击”...“弹出的菜单的位置 ,负数是往右移-->
    </style>

     \bullet android:backgroundTint  应用于background 的色彩。而background是一个可绘制的背景,可以是一个完全可绘制资源的引用(例如图片、可调整大小位图9-patch、XML状态列表描述、etc),或者是纯色如黑色。backgroundTint只能用颜色,而background有引用、图片和颜色。如果你只是要给背景上纯色的话,建议用backgroundTint,如果你要用背景图片的话,就用background,可以分别提高对应的执行效率!

android:backgroundTint="#afbfff"

     \bullet android:backgroundTindMode 当我们既设置了 android:background 又设置了 android:backgroundTint 时,那么就会将 android:backgroundTint 设置的颜色与背景进行一个叠加,叠加的常用模式如下:

    1. PorterDuff.Mode.SRC_OVER 正常绘制显示,上下层绘制叠盖。

    2. PorterDuff.Mode.SRC_IN 取两层绘制交集。显示上层

    3. PorterDuff.Mode.SRC_ATOP 取下层非交集部分与上层交集部分

    4. PorterDuff.Mode.SCREEN 取两图层全部区域,交集部分变为透明色

android:backgroundTintMode="src_over"

Toolbar 加上 menu

        如下图,当我们设置完 toolbar 时,并没有右侧的 menu ?

        我们可以给 Toolbar 加上右侧的 menu (那三个"..."),在 toolbar 所在的 activity 中重写 onCreateOptionMenu() 方法即可实现。

/**
     * menu 与 toolbar 绑定
     */
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.toolbar, menu);
        // TODO 拿到 toolbar 里的 item
        MenuItem searchItem = menu.findItem(R.id.action_search);
        SearchView searchView = (SearchView) searchItem.getActionView();

        searchItem.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                return true;
            }
        });

        return super.onCreateOptionsMenu(menu);
    }

  toolbar.xml 如下

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/action_favorite"
        android:icon="@drawable/nav_selector"
        android:title="@string/favorite"
        app:showAsAction="never" />

    <!-- Settings, should always be in the overflow -->
    <item
        android:id="@+id/action_settings"
        android:icon="@drawable/ic_baseline_settings_64"
        android:title="@string/settings"
        app:showAsAction="never" />

    <item android:id="@+id/action_search"
        android:title="@string/action_search"
        android:icon="@drawable/ic_baseline_search_64"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView" />


</menu>

 加上 menu 的效果

 

  给 menu 的 item 设置点击事件,重写 onOptionsItemSelected() 方法。这里简单的进行了一个 Toast 弹窗,你可以进行丰富的其它设置。

/**
     *  menu 里 item 点击事件监听
     * @param item menu 里的 菜单
     * @return
     */
    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.action_settings:
                Toast.makeText(MainActivity.this, R.string.settings, Toast.LENGTH_SHORT).show();
                return true;
            case R.id.action_favorite:
                Toast.makeText(MainActivity.this, R.string.favorite, Toast.LENGTH_SHORT).show();
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

 Toolbar 设置 Theme

        细心的朋友可以发现,上面 toolbar 与我们开始演示的 UI 还是有些区别,比如正副标题的颜色,menu 是横着的且是绿色的等。这时我们可以通过给 Toolbar 设置 Theme 来完成。

        可以通过 textColorPrimary 来设置正标题字体颜色,textColorSecond 设置副标题字体颜色,同时必须实现 windowActionBar 和 windowNoTitle 。

<!--    使用ToolBar, 在 AndroidManifest 里的activity添加该 theme-->
    <style name="ToolBarAppTheme" parent="MaterialAppTheme">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <!-- 修改右侧溢出菜单,副标题,navigation 的颜色-->
        <item name="android:textColorSecondary">@color/purple_500</item>
        <!-- 不能在这里修改弹出框的右边距-->
        <!--        <item name="android:paddingEnd">-5dp</item>-->
        <!-- 设置文字颜色的-->
        <item name="android:textColorPrimary">@color/Green700</item>
        <!-- 设置文字大小的-->
        <item name="android:textSize">16sp</item>
        <!-- 注意设置的位置  -->
        <item name="actionOverflowButtonStyle">@style/OverflowTheme</item>
        <item name="toolbarStyle">@style/NoSpaceActionBarTheme</item>
    </style>

actionOverflowButtonStyle 可以用来设置 menu 的样式,让右上角的 ”...“ 横着显示,且设置它的颜色,OverflowTheme 内容如下:

    <style name="OverflowTheme" parent="android:style/Widget.Holo.Light.ActionButton.Overflow">
    <item name="android:src">@drawable/ic_tool_more_horiz_24</item>
    <item name="android:paddingStart">12dp</item>
    <item name="android:paddingEnd">12dp</item>

最后完成上面的 Theme 设置,那么我们要在哪里用 ToolBarAppTheme 呢?答案是 AndroidMnifest 里,加在 Toolbar 所在 activity 上。这样就可以显示我们想要的效果了。

注意:对于主题 Theme ,一般是 app --> Activity --> 控件,且后面的 theme 可以覆盖前面的。

完整 Demo

链接:https://pan.baidu.com/s/1nlTax1GFXXR2q_khFz2Wew 
提取码:2tb5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/143684.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

联想昭阳E4电脑U盘安装Win10系统操作教学

联想昭阳E4电脑U盘安装Win10系统操作教学分享。有用户想要将自己的联想昭阳E4电脑重装到Win10系统来使用。那么今天教大家一个U盘重装系统的方法&#xff0c;使用这个方法能够在系统出现问题的时候进行系统的重置&#xff0c;解决系统问题。一起来看看具体的重装教学吧。 准备工…

Exynos_4412——PWM实验

目录 一、PWM简介 1.1蜂鸣器工作原理 有源蜂鸣器 无源蜂鸣器 1.2使用GPIO控制 1.3PWM控制 1.4PWM参数 周期​ 占空比 二、Exynos_4412下的PWM控制器 三、PWM寄存器详解 四、PWM编程 一、PWM简介 1.1蜂鸣器工作原理 有源蜂鸣器 有源蜂鸣器只要接上额定电源就可以发…

主流的4种跨隔离网文件摆渡方式对比介绍

网络上承载了太多企业的业务&#xff0c;其安全性一定要得到保障&#xff0c;所以很多企业和机构都会选择将网络进行隔离划分&#xff0c;比如内外网隔离&#xff0c;办公网、研发网隔离等&#xff0c;也有不少企业会选择用云桌面的形式。 然而网络的建设就是为了互通的&#x…

【学vue跟玩一样】快速搞懂vue渲染

Vue的渲染分为条件渲染和列表渲染&#xff0c;那究竟什么式渲染呢?1.条件渲染1.v-if写法:(1)v-if"表达式"(2)v-else-if"表达式"(3)v-else"表达式"&#xff08;和我们曾经学过的JavaScript里面的if语句几乎一样&#xff09;适用于:切换频率较低的…

React umi中使用sass

umi默认支持less和css&#xff0c;如果想要使用sass&#xff0c;需要安装插件以及配置 一、安装umi的sass插件 yarn add umijs/plugin-sass 二、安装sass依赖 yarn add sass-loader node-sass 三、配置sass 在config/config.js或者 .umirc.ts文件中配置如下&#xff1a; sa…

linux 卸载elasticsearch及安装elasticsearch8.5(rpm)

目录 卸载elasticsearch rpm安装elasticsearch8.5 卸载elasticsearch # 检查elasticsearch服务状态 systemctl status elasticsearch.service; # 停止elasticsearch服务状态 systemctl stop elasticsearch.service; # 剔除elasticsearch服务 systemctl disable elasticsea…

宏任务和微任务JS执行顺序题目+总结

宏任务和微任务 resolve&#xff08;传的参数&#xff09;标记成功&#xff0c;会调用promise.then 练习网站&#xff1a; 关于promise深入理解太长没来及看 博客文章&#xff1a; promise本身是同步的&#xff0c;then/catch的回调函数是异步的 直接做题加深理解 点常见面…

漱玉转债,合力转债上市价格预测

漱玉转债基本信息转债名称&#xff1a;漱玉转债&#xff0c;评级&#xff1a;AA-&#xff0c;发行规模&#xff1a;8.0亿元。正股名称&#xff1a;漱玉平民&#xff0c;今日收盘价&#xff1a;18.1&#xff0c;转股价格&#xff1a;21.27。当前转股价值 转债面值 / 转股价格 *…

2.机器学习问题

2.机器学习问题 监督学习 监督学习&#xff08;supervised learning&#xff09;擅长在“给定输入特征”的情况下预测标签。 每个“特征-标签”对都称为一个_样本_&#xff08;example&#xff09;。 有时&#xff0c;即使标签是未知的&#xff0c;样本也可以指代输入特征。 …

手写RPC框架04-过滤器模块实现

源代码地址&#xff1a;https://github.com/lhj502819/IRpc/tree/v5 系列文章&#xff1a; 注册中心模块实现路由模块实现序列化模块实现过滤器模块实现自定义SPI机制增加框架的扩展性的设计与实现 为什么需要过滤器&#xff1f; 目前整个RPC框架的功能基本已经齐全了&…

ArcGIS基础实验操作100例--实验54 Shapfile与Graphic转换

本实验专栏参考自汤国安教授《地理信息系统基础实验操作100例》一书 实验平台&#xff1a;ArcGIS 10.6 实验数据&#xff1a;请访问实验1&#xff08;传送门&#xff09; 高级编辑篇--实验54 Shapfile与Graphic转换 目录 一、实验背景 二、实验数据 三、实验步骤 &#xff…

2022天翼数字科技生态大会 五大亮点看永不落幕的“5G物联生态城”

2022天翼数字科技生态大会&#xff0c;近日于线上隆重开幕。大会首次“云”上绽放&#xff0c;将给我们带来一场怎样的科技盛宴&#xff1f; 本次大会&#xff0c;中国电信天翼物联以“智启物联未来”为主题&#xff0c;运用“元宇宙”VR技术&#xff0c;打造虚拟世界中的“5G物…

Netty 创建高性能聊天室 单聊 群聊 websocket

目录 一、简单实现Netty发送消息的案例 二、websocket连接注册用户 三、实现单聊 四、群聊功能 五、案例代码 一、简单实现Netty发送消息的案例 案例一的依赖有&#xff1a;若没springboot项目有自动对应版本&#xff0c;其他版本可以使用maven仓库的最新版本。 <depe…

img的应用

我的目的是&#xff0c;因为图片足够的大&#xff0c;我想让它在一个小盒子里居中显示&#xff0c;所以我这样做了&#xff1a;<style>.text{width: 375px;height: 100px;} </style> <body><div class"text"><img src"./img/5.png&q…

企业为什么要利用数据中台进行数字化转型?_光点科技

近两年“数字化”已经悄悄的替代了“信息化”。那么什么是“企业的数字化转型”&#xff1f;数字化转型是企业战略层面的概念&#xff0c;它并不是追求眼前效益的机灵战术&#xff0c;其本质&#xff0c;是用数字化技术对业务的重构、流程的重构和组织的重构&#xff0c;目的是…

云呐|什么是固定资产?什么是流动资产

什么是固定资产&#xff1f;什么是流动资产&#xff0c;  1、固定资产  属于产品生产过程中用来改变或者影响劳动对象的劳动资料&#xff0c;是固定资本的实物形态固定资产在生产过程中可以长期发挥作用&#xff0c;长期保持原有的实物形态&#xff0c;但其价值则随着企业生…

自己centos7系统制作iso镜像,并新建虚拟机

一、自己centos7系统制作iso镜像 1. 前置工作 将系统安全配置 SELINUX 改为 disabled&#xff0c;否则制作好的镜像无法登陆&#xff01;&#xff01;&#xff01; vim /etc/selinux/config # 将其从 enforcing 改为 disabled SELINUXdisabled2.安装 mondo rescue cd /etc…

正则表达式的使用

什么是正则表达式 正则表达式&#xff0c;又称规则表达式,&#xff08;Regular Expression&#xff0c;在代码中常简写为regex、regexp或RE&#xff09;&#xff0c;是一种文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之间的字母&#xff09;和特殊字…

使用VC时一些容易犯的错误

本文迁移自本人网易博客&#xff0c;写于2011年1月13日&#xff0c;使用VC时一些容易犯的错误 - lysygyy的日志 - 网易博客 (163.com)1、在调用其他类中的函数时&#xff0c;需要在当前类中声明一个类对象&#xff0c;但是调用的时候&#xff0c;编译会出错。出现很多符号&…

2023年SQL大厂高频实战面试题(详细解析)

大家好&#xff0c;我是宁一。 已经连续四个周没有休息了&#xff0c;最近主业、副业都是忙碌的巅峰期&#xff0c;晚上11点下班回家&#xff0c;再写课写到凌晨两点。 连续一个多月连轴转&#xff0c;每天最大的愿望&#xff0c;就是睡足觉。 这一阶段终于忙完了~继续来更新SQ…