Bugly全量更新之自定义UI爬坑之路(使用固定控件id的方式)

背景介绍: APP内部版本更新提醒使用了 Buglycrashreport_upgrade 项目. 由于默认的更新弹窗 UI 样式跟APP的风格差距太大.于是有了自定义UI的需求, 官方提供有2种自定义UI的方式, 一种是通过自定义布局文件然后对相应控件加 tag 的方式实现. 一种是通过自定义 Activity 方式实现.由于我的需求没有那么复杂, 所以使用的是第一种自定义UI的方式.

最终效果图:

实现方式简单写一下.

首先自定义布局文件, 第一个坑

第一个坑, 弹窗顶部的 banner 或者说 logo 与下面的版本信息之间有一根线分割, 因为粗心大意把 写成了 , 所以报了一个很奇怪的 bug,如下:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.xxx.xxx/com.tencent.bugly.beta.ui.BetaActivity}: android.view.InflateException: Binary XML file line #36: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2837)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2898)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1619)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:154)
        at android.app.ActivityThread.main(ActivityThread.java:6349)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:912)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:802)
     Caused by: android.view.InflateException: Binary XML file line #36: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:761)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727) 

排查了半小时才发现这个问题的原因. 对自己无语o(゚Д゚)っ!

upgrade_dialog.xml




    

        

        

        

        

        

        

            

shape_text_primary_bg.xml



    
    

splash_btn_bg_primary.xml



    
    

Bugly 初始化之前指定布局id, 第二个坑

第一个坑, 弹出的弹窗使状态栏变成黑色, 我项目里状态栏是透明的, 导致很难看, 应该是因为官方的 BetaActivity 没有处理, 于是我设置监听在 onCreate 时改变了状态栏.

// bugly延迟3秒初始化
Beta.initDelay = 3 * 1000;
// 指定自定义布局id
Beta.upgradeDialogLayoutId = R.layout.upgrade_dialog;
// 指定升级弹窗只能在主页弹出
Beta.canShowUpgradeActs.add(MainActivity.class);
Beta.upgradeDialogLifecycleListener = new UILifecycleListener(){

        @Override
        public void onCreate(Context context, View view, UpgradeInfo upgradeInfo) {
            // 解决弹窗时状态栏为黑色的问题. 
            if (context instanceof com.tencent.bugly.beta.ui.BetaActivity) {
                com.tencent.bugly.beta.ui.BetaActivity betaActivity = (com.tencent.bugly.beta.ui.BetaActivity)context;
                Window window = betaActivity.getWindow();
				window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            }
        }

        @Override
        public void onStart(Context context, View view, UpgradeInfo upgradeInfo) {

        }

        @Override
        public void onResume(Context context, View view, UpgradeInfo upgradeInfo) {

        }

        @Override
        public void onPause(Context context, View view, UpgradeInfo upgradeInfo) {

        }

        @Override
        public void onStop(Context context, View view, UpgradeInfo upgradeInfo) {

        }

        @Override
        public void onDestroy(Context context, View view, UpgradeInfo upgradeInfo) {

        }
    };

第三个坑 更新版本信息的文字是灰色的

更新版本信息的文字是灰色的, 一触摸到弹窗后又变为黑色的, 手放开又恢复为灰色的?
这个问题的原因是因为没有为字体设置颜色. 后来我把 TextView 设置上字体颜色后就没有这个问题了.

第四个坑 顶部 banner1.3.5 版本后就不显示了##

我使用的弹窗样式是第二种:

这个顶部的 banner 图在 SDK 1.3.5 版本以下是没有问题的, 但是我发现在 1.3.6, 1.3.7 版本后这个 bannner 图就不显示了. 这个问题我至今没有解决. 加了官方QQ群(429975901)在问, 但是目前还是没有人回复我这个问题.

你可能感兴趣的:(Android,android_BUG系列)