Android中的夜间模式实现

           本人菜鸟,今天突然想起之前做过的夜间模式,抽空整理了一下。

个人觉得通过 设置主题的方式以及给整个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的效果也变暗

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值