setTheme(Theme_NoDisplay)巧妙使用

一般情况下,我们的activity的主题都会直接在manifest.xml文件中去声明。最近产品给了这样一个需求,可以巧妙的而使用了setTheme(android.R.style.Theme_NoDisplay);这种方式解决了产品需求的变更。
原始需求:

同样录制界面左侧的导入视频 同样也会经历编辑视频页面,在到编辑中...合成mp4进度页面。
说明:合成视频的方法在第二个页面编辑视频页面中。
需求变更:
产品说:为了简化用户的录制操作成本,同时不减少生成的视频的优质性,我们权衡利弊,希望
1.在录制视频的时候,干掉第二个编辑页面。
2.而在导入视频的时候,进入到第二个页面,让用户主动自己选择的添加编辑特效等。
那么问题来了,合成视频的方法在编辑页面中,第三个页面的进度Fragment也是属于编辑页面Activity的。
第一种改动方式:copy一份合成视频的方法到录制页面,然后合成视频的进度也得要在录制界面中添加,可以实现,但是代码量会大那么一些。
下面使用setTheme的方式,秒改了这个需求。
第二种方式
直接在第二个页面oncreate方法中添加如下代码:
//表示制作工艺是录制
if ("1".equals(mCraftWork)) {
setTheme(android.R.style.Theme_NoDisplay);
}
mCrartWork:1表示的是从录制页面进入到编辑页面,2表示导入本地视频页面进入到编辑页面。
然后在onstart方法中添加如下代码:
if ("1".equals(mCraftWork)) {
renderToVideo();
finish();
}
就完美解决了上述问题。
这样如果是录制视频的话,用户看到的是直接进入到合成视频进度页面,就看不到编辑页面的界面了。实际上不过是编辑页面的activity重新设置了theme 没有显示出来而已。
下面是theme的源码:


@null
@null
true
@null
true
true
其实技术点很简单过,拓展一种解题的思路,然后尝试和去寻找有没有相应的api而已。




你可能感兴趣的:(android开发)