百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
< 返回工具列表
T

ThemeDemo

> 编程语言
开源

(已弃用)日间/夜间模式切换

385 stars0 点赞0 次浏览
访问官网GitHub

工具介绍

(已弃用)日间/夜间模式切换

#效果图:

Github
#前面:
实现的原理像我微博之前的说的那样.

关于多主题实现的,我这里的做法是继承AppCompatActivity,置换了AppCompatDelegate中AppCompatViewInflater中的createView 方法.实现了对 xml 控件的控制.

#实现:

  1. 实现了日夜模式的切换.(不重启 Acitivity )
  • 解决了因为快速点击 View 导致的多次响应点击事件.
  • 内部实现了 Android 5.0 的CircularReveal效果.

###优点: 布局中直接使用 Android 默认的控件就可以.在解析以后会根据控件转换成支持主题切换的控件.解放冗余的名称. ###缺点: 暂时不支持 Menu 级的切换.

###支持属性: View 级:
nightBackground
TextView 级:
nightTextColor
nightTextColorHighlight
nightTextAppearance
nightTextColorLink
nightTextColorHint
ListView 级:
nightLVDivider
LinearLayout 级别:
nightDivider
第三方控件支持: nightBackground
nightTextColor

###gradle: /build.gradle


repositories {
    maven {
        url "https://jitpack.io"
    }
}

/app/build.gradle

compile 'com.github.zzz40500:ThemeDemo:0.1'

##使用方法: ####代码上 Activity 继承MAppCompatActivity
####布局上


    
    

    

    

处女座在根控件加入tools:ignore="MissingPrefix"

####切换主题方法:


/**
 * 
 * @param activity 当前 Activity
 * @param skinStyle Dark(夜间),Light(日间)
 * @param skinStyleChangeListener (转换监听器)
 */
SkinCompat.setSkinStyle(Activity activity, SkinStyle skinStyle,SkinStyleChangeListener skinStyleChangeListener) 

####使用CircularReveal 效果: 5.0 上面用的是原生的 api,5.0下面才是自己的实现的方法.

 

CRAnimation crA =
        new CircularRevealCompat(mRl).circularReveal(
                mFloatingActionButton.getLeft() + mFloatingActionButton.getWidth() / 2, mFloatingActionButton.getTop() + mFloatingActionButton.getHeight() / 2, 0, mRl.getHeight());

if (crA != null)
    crA.start();

###扩展: 支持对原生控件的解析时期替换:

这边很奇葩的把 TextView 变成了 EditText 控件,只是为了替换而替换.
WidgetFactor.getInstant().setWidgetParser(new WidgetFactor.WidgetParser() {
    @Override
    public View parseWidget(String name, Context context, AttributeSet attrs) {
        //布局中的名称
        if (name.equals("TextView")) {
            return new EditText(context, attrs);
        }
        //返回 null 则不替换.
        return null;
    }
});

第三方控件支持CircularReveal效果:
实现CircleRevealEnable这个接口:模板

###未来可能实现的:

  1. 实现Toolbar和 menu 的日夜间切换.
  • 替换CircularReveal算法 .
  • 出个轻量的,不带日夜间切换的库.

#尾巴:

  1. 实现原理主要是受到代码家在Google I/O 2015 为 Android 开发者带来了哪些福利里面的启发.
  • 我在项目中也仅仅只是用在解决快速点击 View 导致的多响应,和使用CircularReveal效果.日夜间模式并没有这个需求.

Issues· 0 开放

查看全部 Issues在 GitHub 打开

暂无开放 Issues,或尚未同步最近议题。

> 标签

Java

暂无评论,来聊聊你的看法吧

> 工具信息

发布日期2026年8月1日
最后更新2026年9月17日
分类编程语言
定价开源

> 相关工具

T
TypeScript
JavaScript 的超集,为前端与全栈提供静态类型
P
Python
通用编程语言,广泛用于 Web、数据与 AI
G
Go
Google 推出的简洁高效系统语言