序
最近了解到一些朋友单身了 ,我就想说不就是一个购物车 ,至于吗 ?看朋友圈发现大部分单身的要比不单身的活的更精彩 ,俺也不知道为啥 ,以前单身的时候压力大 ,现在不单身了压力更大 。真的是人人都有一本难念的经书呀 。 对于现阶段感情上有挫折的朋友 ,我只想说但愿 " 有情人终成眷属 " ,并且不要太为难自己 ,有些事情或者结果如果把时间线拉长一点看的话也许是另一番风景 。
有个小伙伴问了一个关于透明主题的技术问题 ,想到之前只是在启动页优化的时候加过这个东西 ,其他的也到没有什么了解 ,脑子的想的是 这就是一个主题或者加个代码问题不大 ,今天写 Demo 的时候才发现有坑 ,只怪我当时很幸运 。
透明主题
什么是 Style 和 什么是 Theme ?
1. Style 对应的是 VIew 为主体 ,在自定义 View 的时候基本都会用到这个 Style 。还有就是我们在写项目的过程中如果发现很多 Adapter 的样式是一样的就可以写个 Style 可以省很多代码 。
比如下面的单行省略 ,在列表中 CourseName 要求单行省略 。
<!--单行省略-->
<style name="GC_Course_Title">
<item name="android:layout_width">wrap_content</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:lines">1</item>
<item name="android:ellipsize">end</item>
<item name="android:maxEms">12</item>
<item name="android:textSize">@dimen/font_size_five</item>
<item name="android:textColor">@color/color_dark_grey</item>
</style>
2. Theme 对应的是 Activity 为主体 。
<!-- 系统主题样式 -->
<style name="GC_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
<!--actionbar底色-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowActionBarOverlay">true</item>
<item name="android:windowBackground">@color/color_bg</item>
<!--不使用系统的toolbar-->
<item name="android:windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="actionBarSize">50dp</item>
<item name="android:windowAnimationStyle">@style/GC_Animation_Activity_Intent</item>
</style>
透明主题设置方法
1. AndroidMainfest.xml 设置
//保留标题和状态栏
android:theme=“@android:style/Theme.Translucent”
//仅保留状态栏
android:theme=”@android:style/Theme.Translucent.NoTitleBar”
//全屏透明
android:theme=”@android:style/Theme.Translucent.NoTitleBar.Fullscreen”
2. 在 styles 中设置
设置透明颜色 color_bg 为 #00000000
<!-- 系统主题样式 -->
<style name="GC_Theme" parent="Theme.AppCompat.Light.DarkActionBar">
<!--actionbar底色-->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowActionBarOverlay">true</item>
// 设置透明颜色 color_bg 为 #00000000
<item name="android:windowBackground">@color/color_bg</item>
<!--不使用系统的toolbar-->
<item name="android:windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="actionBarSize">50dp</item>
<item name="android:windowAnimationStyle">@style/GC_Animation_Activity_Intent</item>
</style>
注意事项
1. 进行设置的页面已经要继承自 Activity ,例如继承的是 AppCompatActivity 的话必闪退 。
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
PS:原因是因为 Activity 和 AppCompatActivity 是有区别的 ,在此只提一个点就是 AppCompatActivity 是带有 Toolbar 的 。这个在进行项目框架封装的时候会遇到 ,比如 Activity 分为两个父类 ,一个是带 Bar 的父类一个是不带 Bar 的父类就需要两个父类去继承不同的Activity 。
扩展
关于透明主题这个技术点 ,说实话在我的生涯中只有两个需求用到过这个功能 。一个是前年我在仿写一个 AOP 注解申请权限的时候用到过透明 Acitivity 的概念 ,当时是直接在项目中作为 module 使用并没有放在 Jitpack ;还有一个是在做启动优化的时候用到过透明主题 ,为什么启动优化会用到这个 ,简单的说就是在启动的时候用透过代替白屏 ,眼睛看到的时候已经是广告页或者是首页(可以理解为视觉优化) 。