项目的热更新用的bugly,不过一直都只是使用他自带的升级弹窗。

不过UI小姐姐说弹窗太丑了,要自定义。

bugly有提供自定义UI的官方文档:https://bugly.qq.com/docs/user-guide/advance-features-android-beta/?v=20160824161206#ui

不过关于自定义里并没有讲得很细致,是以为我可以凭快秃的脑袋猜出来叭。

官方文档里有提到需要标注的5个tag:

可是并没有说这五个tag都必须出现在布局中, 否则将显示不出更新的信息

所以布局文件里不管有没有用到这些,都要全部设置出来,比如我的布局文件里只用了标题和说明以及下载按钮

但在布局文件里依然添加了另外两个tag:

            <TextView
android:tag="beta_cancel_button"
android:layout_width="0dp"
android:layout_height="0dp" />
<TextView
android:tag="beta_upgrade_info"
android:layout_width="0dp"
android:layout_height="0dp" />

噢还有就是弹窗的半透明背景需要自己在布局文件中设置。

一般是在application类里初始化bugly,在init之前先设置布局文件

        Beta.upgradeDialogLayoutId = R.layout.activity_upgrade;//注意这句要设置在bugly init之前
Bugly.init(this, Constants.APP_ID_BUGLY, false);
Beta.upgradeListener = new UpgradeListener() {
@Override
public void onUpgrade(int ret, UpgradeInfo strategy, boolean isManual, boolean isSilence) {
if (strategy != null) {
L.e(TAG, "检测到更新");
Intent i = new Intent();
i.setClass(getApplicationContext(), UpgradeActivity.class);
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i);
} else {
L.e(TAG, "没有更新");
}
}
}; /* 设置更新状态回调接口 */
Beta.upgradeStateListener = new UpgradeStateListener() {
@Override
public void onUpgradeSuccess(boolean isManual) {
L.e(TAG, "UPGRADE_SUCCESS");
} @Override
public void onUpgradeFailed(boolean isManual) {
L.e(TAG, "UPGRADE_FAILED");
} @Override
public void onUpgrading(boolean isManual) {
L.e(TAG, "UPGRADE_CHECKING");
} @Override
public void onDownloadCompleted(boolean b) { } @Override
public void onUpgradeNoVersion(boolean isManual) {
L.e(TAG, "UPGRADE_NO_VERSION");
}
};

跳转的UpgradeActivity就是刚刚画布局的类,把背景半透明就好了,至于这个类里的代码就是先这样,这样,再那样,就可以了(官方文档里有)

使用bugly热更新时自定义升级弹窗的UI样式的更多相关文章

  1. Cordova热更新和App升级 - 简书

    原文:Cordova热更新和App升级 - 简书 公司的cordova项目前段时间增加了热更新功能,自己第一次做的时候在网上查找了很多资料,有的资料写的并不全面遇到了很多坑.因此总结一些在开发过程中遇 ...

  2. Lua热更新时正确设置文件名

    Lua热更新时正确设置文件名(金庆的专栏 2016.12)Lua热更新模块见:https://github.com/jinq0123/hotfix其中使用 load(chunk) 来加载更新后的内容, ...

  3. 使用yum更新时不升级Linux内核的方法

    RedHat/CentOS/Fedora使用 yum update 更新时,默认会 升级内核 .但有些服务器硬件(特别是组装的机器)在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动,很麻烦. ...

  4. 用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- CustomYieldInstruction 自定义中断指令

    ActionScript3脚本引擎为了方便热更新逻辑开发,提供的从脚本继承Unity类库功能在一些情况下可以提供开发的便利. 这次来建立一个示例,演示一下如何在脚本中自定义协程中断指令 Unity中的 ...

  5. Cordova热更新和App升级

    web代码的更新此更新方式,只需要更新web前段代码,不需要更新android的原生代码.只是对js.html等的更新.1.添加插件 Cordova Hot Code Pushcordova plug ...

  6. Linux/CentOS配置:使用yum update更新时不升级内核的方法

    RedHat/CentOS/Fedora使用 yum update 更新时,默认会升级内核.但有些服务器硬件(特别是组装的机器)在升级内核后,新的内核可能会认不出某些硬件,要重新安装驱动,很麻烦.所以 ...

  7. [Erlang10]为什么热更新时,Shell执行2次l(Module)后会把原来用到Module的进程 kill?

    0. 问题引入: -module(hot_code_server). -compile(export_all). start() –> erlang:register(?MODULE, erla ...

  8. walle多渠道打包+Tinker(bugly)热更新集成+360加固(乐固)

    这三个东东是干啥的相信大家都有所耳闻了,如果你没有听说过,请出门左拐,百度一下你就知道.这里不对这三个东东具体的集成方式做详细的介绍,因为官方文档已经写的很详细了,主要是对同时使用这三个东东时所需要注 ...

  9. bugly集成了Tinker热更新

    介绍 热更新能力是Bugly为解决开发者紧急修复线上bug,而无需重新发版让用户无感知就能把问题修复的一项能力.Bugly目前采用微信Tinker的开源方案,开发者只需要集成我们提供的SDK就可以实现 ...

随机推荐

  1. Django 初识之安装下载以及模型目录简介

    Django 一.web应用 web应用什么 Web应用程序是一种可以通过Web访问的应用程序,程序的最大好处是用户很容易访问应用程序,用户只需要有浏览器即可,不需要再安装其他软件 应用程序有两种模式 ...

  2. Ettercap 详细参数

    Ettercap最初设计为交换网上的sniffer,但是随着发展,它获得了越来越多的功能,成为一款有效的.灵活的中介攻击工具.它支持主动及被动的协议解析并包含了许多网络和主机特性(如OS指纹等)分析. ...

  3. _IplImage

    IplImage结构 由于OpenCV主要针对的是计算机视觉方面的处理,因此在函数库中,最重要的结构体是IplImage结构.从本质上讲,他是一个CvMat对象,但它还有一些其他成员变量将矩阵解释为图 ...

  4. Spring Cloud Sleuth 知识点

    Spring应用在监测到Java依赖包中有sleuth和zipkin后,会自动在RestTemplate的调用过程中向HTTP请求注入追踪信息,并向Zipkin Server发送这些信息. 出处:ht ...

  5. underscore 工具

    =============== 通知: 博主已迁至<掘金>码字,博客园可能以后不再更新,掘金地址:https://juejin.im/post/5a1a6a6551882534af25a8 ...

  6. C#中集合ArrayList与Hashtable的使用

    C#中集合ArrayList与Hashtable的使用 http://blog.csdn.net/linukey/article/details/42506819 ArrayList: 一. 注意事项 ...

  7. js沉思录一:js的核心概念

    js的核心概念: 原型.对象(Object).函数(Function); 原型:路由路径上非叶子结点的对象: 对象:无序属性(包括函数)的集合: 函数:函数上下文的集合: 原型: 原型的创建.指定.修 ...

  8. What is a Servlet?

    Servlet 工作原理解析 https://www.ibm.com/developerworks/cn/java/j-lo-servlet/index.html 你可以理解为,Spring MVC是 ...

  9. 封装好的observer.js,用于非父子组件传值,直接调用$on和$emit方法

    const eventList = {} const $on = (eventName,callback)=>{ if(!eventList[eventName]){ eventList[eve ...

  10. Linux下g++编译thread出错的的解决方法

    错误如下图所示: 因为thread是C++11新加入的特性,所以我们在用g++编译的时候不能直接用,需要在g++后面加上 -std=c++0x -pthread 如果是gcc编译多线程的话则应该要用 ...