您的位置:首页 > 移动开发 > Android开发

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的效果也变暗
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: