Android中的夜间模式实现
2014-09-03 14:03
309 查看
本人菜鸟,今天突然想起之前做过的夜间模式,抽空整理了一下。
个人觉得通过 设置主题的方式以及给整个Activity页面上加上一层薄纱的效果想配合,这样的效果最好。
1、设置主题的方式
在style.xml文件里,实现夜间和白天两个风格主题
代码如下:
<!-- 默认风格 -->
<style name="BrowserThemeDefault" parent="@android:style/Theme.NoTitleBar">
<item name="bookimage">@android:color/white</item>
<item name="tvcolor">@color/details_news_title_text_color</item>
</style>
<!-- 夜间模式 -->
<style name="BrowserThemeNight" parent="@android:style/Theme.NoTitleBar">
<item name="bookimage">@android:color/background_dark</item>
<item name="tvcolor">@color/details_news_site_title_color</item>
</style>
其中 两个<item/>内的"bookimage"和"tvcolor"两个属性需要在attrs.xml里先声明
<resources >
<attr name="bookimage" format="reference|color" />
<attr name="tvcolor" format="reference|color" />
</resources>
然后在activity对应的布局文件里,把需要改变颜色的widget的颜色设置成“?tvcolor”,如android:textcolor="?tvcolor"
把需要改变背景的布局的background设置成“?bookimage”,如 android:background="?bookimage"。
说明:这里的“?tvcolor”和“?bookimage”,我个人理解是相当于占位的作用,到代码中通过设置主题来填充相应布局的颜色或背景。
2、薄纱效果
实际上就是给整个界面加一个半透明的textview
代码如下:
// 夜间模式
public void night() {
WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
lp.gravity = Gravity.BOTTOM;// 可以自定义显示的位置
lp.y = 10;// 距离底部的距离是10像素 如果是 top 就是距离top是10像素
TextView textView = new TextView(this);
textView.setBackgroundColor(0x99000000);
mWindowManager.addView(textView, lp);
}
加这一层薄纱的用处就是把界面上的actionbar以及你自己设计的titlebar的效果也变暗
个人觉得通过 设置主题的方式以及给整个Activity页面上加上一层薄纱的效果想配合,这样的效果最好。
1、设置主题的方式
在style.xml文件里,实现夜间和白天两个风格主题
代码如下:
<!-- 默认风格 -->
<style name="BrowserThemeDefault" parent="@android:style/Theme.NoTitleBar">
<item name="bookimage">@android:color/white</item>
<item name="tvcolor">@color/details_news_title_text_color</item>
</style>
<!-- 夜间模式 -->
<style name="BrowserThemeNight" parent="@android:style/Theme.NoTitleBar">
<item name="bookimage">@android:color/background_dark</item>
<item name="tvcolor">@color/details_news_site_title_color</item>
</style>
其中 两个<item/>内的"bookimage"和"tvcolor"两个属性需要在attrs.xml里先声明
<resources >
<attr name="bookimage" format="reference|color" />
<attr name="tvcolor" format="reference|color" />
</resources>
然后在activity对应的布局文件里,把需要改变颜色的widget的颜色设置成“?tvcolor”,如android:textcolor="?tvcolor"
把需要改变背景的布局的background设置成“?bookimage”,如 android:background="?bookimage"。
说明:这里的“?tvcolor”和“?bookimage”,我个人理解是相当于占位的作用,到代码中通过设置主题来填充相应布局的颜色或背景。
2、薄纱效果
实际上就是给整个界面加一个半透明的textview
代码如下:
// 夜间模式
public void night() {
WindowManager mWindowManager = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_APPLICATION,
WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, PixelFormat.TRANSLUCENT);
lp.gravity = Gravity.BOTTOM;// 可以自定义显示的位置
lp.y = 10;// 距离底部的距离是10像素 如果是 top 就是距离top是10像素
TextView textView = new TextView(this);
textView.setBackgroundColor(0x99000000);
mWindowManager.addView(textView, lp);
}
加这一层薄纱的用处就是把界面上的actionbar以及你自己设计的titlebar的效果也变暗
相关文章推荐
- Android实现日夜间模式切换
- Android夜间模式显示实现方式
- Android 夜间模式切换,颜色渐变效果实现
- Android WindowManager的使用 & 添加 遮罩层 实现夜间模式
- Android实现夜间模式方式
- Android通过改变主题实现夜间模式
- Android实现夜间模式小结
- Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
- Android 之夜间模式(多主题)的实现
- Android夜间模式实现,通过在window上加一层半透明的View
- android夜间模式的实现
- Android夜间模式实现
- Android 夜间模式实现
- Android 实现切换主题皮肤功能(类似于众多app中的 夜间模式,主题包等)
- Android夜间模式的几种实现
- Android应用开发中的夜间模式实现(一)
- Android 夜间模式实现(二)
- Android夜间模式实现
- Android 实现夜间模式
- 【android】夜间模式简单实现