setTheme(Theme_NoDisplay)巧妙使用

Posted hymKing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的源码:
<!-- Default theme for activities that don't actually display a UI; that
is, they finish themselves before being resumed. -->
<stylename="Theme.NoDisplay">
<itemname="windowBackground">@null</item>
<itemname="windowContentOverlay">@null</item>
<itemname="windowIsTranslucent">true</item>
<itemname="windowAnimationStyle">@null</item>
<itemname="windowDisablePreview">true</item>
<itemname="windowNoDisplay">true</item>
</style>
其实技术点很简单过,拓展一种解题的思路,然后尝试和去寻找有没有相应的api而已。



以上是关于setTheme(Theme_NoDisplay)巧妙使用的主要内容,如果未能解决你的问题,请参考以下文章

Material DatePicker 禁用年份选项

android学习第一篇 基本概念

在 Tailwind CSS 中制作动画标签?

ace 编辑器光标行为不正确

以编程方式更改活动主题不起作用[重复]

Android:如何创建透明的对话框主题活动