ToolBar MenuItem 实现 Badge 数字提醒 需要以下几个步骤:

自定义 ActionProvider

ToolBar 自定义 menu

ToolBar 右侧menu添加角标

效果预览

数字提醒.png

自定义布局,要显示的BadgeView( menu_badge_provider.xml )

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="?actionBarItemBackground">

android:id="@+id/iv_icon"

android:layout_width="wrap_content"

android:layout_height="match_parent"

android:layout_centerInParent="true"

android:scaleType="center"

android:src="@drawable/ic_file_download_white_24dp"/>

android:id="@+id/tv_badge"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_alignParentEnd="true"

android:layout_alignParentRight="true"

android:layout_margin="3dp"

android:background="@drawable/shape_circle_red"

android:gravity="center"

android:text="0"

android:textColor="@android:color/white"

android:textSize="12sp"/>

其中shape_circle_red是红色的圆形背景(shape_circle_red.xml)

android:shape="oval">

android:width="20dp"

android:height="20dp" />

自定义ActionProvider

public class BadgeActionProvider extends ActionProvider {

private ImageView mIvIcon;

private TextView mTvBadge;

private View.OnClickListener mOnClickListener;

public BadgeActionProvider(Context context) {

super(context);

}

@Override

public View onCreateActionView() {

//读取support下Toolbar/ActionBar的高度,为了让这个Menu高和宽和系统的menu达到一致。

int size = UiUtils.getDimens(android.support.design.R.dimen.abc_action_bar_default_height_material);

ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(size, size);

View view = LayoutInflater.from(getContext())

.inflate(R.layout.menu_badge_provider, null, false);

view.setLayoutParams(params);

mIvIcon = view.findViewById(R.id.iv_icon);

mTvBadge = view.findViewById(R.id.tv_badge);

view.setOnClickListener(new BadgeMenuClickListener());

return view;

}

/**

* 设置图标。

*

* @param icon drawable 或者mipmap中的id。

*/

public void setIcon(@DrawableRes int icon) {

mIvIcon.setImageResource(icon);

}

/**

* 设置显示的数字。

*

* @param i 数字。

*/

public void setBadge(int i) {

mTvBadge.setText(Integer.toString(i));

}

/**

* 设置文字。

*

* @param i string.xml中的id。

*/

public void setTextInt(@StringRes int i) {

mTvBadge.setText(i);

}

/**

* 设置显示的文字。

*

* @param i 文字。

*/

public void setText(CharSequence i) {

mTvBadge.setText(i);

}

public void setOnClickListener(View.OnClickListener onClickListener) {

mOnClickListener = onClickListener;

}

private class BadgeMenuClickListener implements View.OnClickListener {

@Override

public void onClick(View v) {

if (mOnClickListener != null) {

mOnClickListener.onClick(v);

}

}

}

}

使用自定义的ActionProvider及自定义menu(toolbar_menu.xml)

xmlns:app="http://schemas.android.com/apk/res-auto">

android:id="@+id/action_download"

android:title=""

app:actionProviderClass="com.wuc.store.widgets.BadgeActionProvider"

app:showAsAction="always"/>

menu的item有一个app:actionProviderClass属性,用这个属性就可以自定义在这里显示的内容(View),这个属性的值是一个完整的类名,如"com.wuc.store.widgets.BadgeActionProvider”。

在代码中使用自定义menu

private BadgeActionProvider mBadgeActionProvider;

private void initToolBar() {

//ToolBar 初始化 menu

mToolBar.inflateMenu(R.menu.toolbar_menu);

MenuItem menuItem = mToolBar.getMenu().findItem(R.id.action_download);

mBadgeActionProvider = (BadgeActionProvider) MenuItemCompat.getActionProvider(menuItem);

mBadgeActionProvider.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

ToastUtils.showShort("下载管理");

}

});

}

android badge xml文件,ToolBar MenuItem 实现 Badge 数字提醒相关推荐

  1. android xml文件放在哪里,android 创建 xml文件

    android创建xml文件的方法. 要操作android的外部存储,所以要在AndroidManifest.xml文件中添加权限. 首先要创建一个XmlSerialize对象. 并创建一个文件,并打 ...

  2. android中XMl文件的读取

    废话不多说了直接上代码: 新建一个Xml文件用于读取: test.xml <Languages cat="1"><lan id="1"> ...

  3. android本地xml文件怎么打开,android 打开本地文件

    首先要知道的是,Android 打开本地文件是根据类型打开的,也就是根据文件的 MIME 类型来确定 如果不知道是什么类型,那就是 : */* 类型匹配表: private static final ...

  4. android中xml文件的生成与读取(Pull)

    1.android中是采用Xml文件序列化器生成Xml文件的, //1得到一个xml文件的序列化器(生成器) XmlSerializer serializer=Xml.newSerializer(); ...

  5. Android开发--XML文件解析

    开发者一般会在XML文件中定义控件,其中肯定包含控件的一些属性,下面就对这些属性做一些简单的介绍: 1)android:id---这个属性是为控件提供一个标识或者是对一个控件采用引用 2)androi ...

  6. android 在xml文件中引用自定义View

    在xml中引用自定义view 方法一: [java] view plaincopy <com.test.copytext.CopyText android:layout_width=" ...

  7. Android --- AndroidManifest.xml文件内容详细介绍

    文章目录 1.android:label="@string/app_name" 2. android:icon="@mipmap/ic_launcher"与an ...

  8. Android生成Xml文件

    我们在开发的过程中,有时会用到将一些数据保存到xml文件中,在Android中给我们提供了xml序列化来帮我们创建一个xml文件,这里我用两种方式来创建xml文件. 一.使用字符串拼接的方式来创建 二 ...

  9. Android Studio xml文件中的布局预览视图

    操作系统:Windows 10 x64 IDE:Android Studio 3.3.1 更新了Android Studio之后,xml文件中的布局预览视图变得如此简洁! 原因是没有勾选Show La ...

最新文章

  1. 负载均衡环境中和如何设置Expires和Etag
  2. golang 项目的目录结构
  3. mysql linux版安装
  4. Flomaster 2020中文版
  5. python time.time和time.clock_Python中time.clock和 time.time的对比探究
  6. android socket io和服务器_Java socket通讯服务器和客户端教学版
  7. python raise函数_Python raise用法
  8. linux之uniq命令
  9. [vue] 说说你对v-clock和v-pre指令的理解
  10. 何小鹏谈“小米造车”:我们要为勇敢者鼓掌
  11. 佳能c3020维修模式 白电平调整_天禹/TY流量计指示针不动维修附近厂家
  12. python爬虫案例_Python“豆瓣电影TOP250爬虫案例”详解
  13. sap hana安装教程
  14. 《黑马QT视频教程》2020.7.31学习日记
  15. C语言 车辆出租管理系统
  16. jquery 蔚蓝网
  17. 【Asan】新鲜货:使用ASan检测内存越界问题
  18. cannot be cast to com.xxx.xxx.model.User] with root cause
  19. 什么百度霸屏?百度霸屏是什么意思?
  20. SVN服务器管理工具——VisualSVN Server Manager

热门文章

  1. Python:requests + bmc开机、关机、优雅重启、强制重启
  2. 超声探头【信号延迟时间】问题求教
  3. IR2103使用实例
  4. 课程设计是计算机科学与技术专业的一门,计算机107编译原理课程设计.doc
  5. 如何取得某月的最后一天?
  6. NEH启发式算法+Tabu搜索算法
  7. Saliency as Evidence: Event Detection with Trigger Saliency Attribution(ACL2022)
  8. IDEA亮暗两种风格转换
  9. Pcap 数据包捕获格式详解
  10. 【深入理解函数式编程】stream流式提取字符串中数字