Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/zzz40500/ThemeDemo
(DEPRECATED)日夜间模式切换
https://github.com/zzz40500/ThemeDemo
Last synced: 3 months ago
JSON representation
(DEPRECATED)日夜间模式切换
- Host: GitHub
- URL: https://github.com/zzz40500/ThemeDemo
- Owner: zzz40500
- License: apache-2.0
- Created: 2015-09-05T06:15:40.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2016-05-24T16:20:50.000Z (over 8 years ago)
- Last Synced: 2024-06-16T03:34:57.662Z (5 months ago)
- Language: Java
- Homepage:
- Size: 139 KB
- Stars: 394
- Watchers: 14
- Forks: 55
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-github-android-ui - ThemeDemo - 日夜间模式切换 (主题样式)
README
[![Android Gems](http://www.android-gems.com/badge/zzz40500/ThemeDemo.svg?branch=master)](http://www.android-gems.com/lib/zzz40500/ThemeDemo)
#效果图:
![ThemeDemo.gif](http://upload-images.jianshu.io/upload_images/166866-f4a26bbeebb3fff9.gif?imageMogr2/auto-orient/strip)
[Github](https://github.com/zzz40500/ThemeDemo)
#前面:
实现的原理像我微博之前的说的那样.
>关于多主题实现的,我这里的做法是继承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这个接口:[模板](https://github.com/zzz40500/ThemeDemo/blob/master/%E6%A8%A1%E6%9D%BF)###未来可能实现的:
1. 实现Toolbar和 menu 的日夜间切换.
* 替换CircularReveal算法 .
* 出个轻量的,不带日夜间切换的库.#尾巴:
1. 实现原理主要是受到代码家在[Google I/O 2015 为 Android 开发者带来了哪些福利](http://www.jianshu.com/p/4f7f55471da2)里面的启发.
* 我在项目中也仅仅只是用在解决快速点击 View 导致的多响应,和使用CircularReveal效果.日夜间模式并没有这个需求.