GithubHelp home page GithubHelp logo

yanzhenjie / sofia Goto Github PK

View Code? Open in Web Editor NEW
1.2K 31.0 161.0 4.9 MB

Android沉浸式效果的实现,状态栏和导航栏均支持设置颜色、渐变色、图片、透明度、内容入侵和状态栏深色字体;兼容竖屏、横屏,当屏幕旋转时会自动适配。

Home Page: https://github.com/yanzhenjie/Sofia

License: Apache License 2.0

Java 100.00%
immersion invasion statusbar navagational

sofia's Introduction

Sofia

Android状态栏与导航栏一体化项目,实现沉浸式效果,状态栏和导航栏均支持设置颜色、渐变色、图片、透明度、内容入侵和状态栏深色字体;兼容竖屏、横屏,当屏幕旋转时会自动适配。

Sofia一词源自于希腊语∑οφία,含义为智慧,译为中文应该可以叫做索菲亚,这也是我赋予这个项目的愿望。

QQ技术交流群:46505645

截图


  • 图一:状态栏和导航栏用图片作为背景。
  • 图二:状态栏和导航栏随着Content的滑动逐渐变色。
  • 图三:内容侵入状态栏,比如产品详情页。
  • 图四:状态栏底色白色,字体深色(大概是灰黑色)。
  • 图五:和DrawerLayout结合使用。
  • 图六:和Fragment结合使用。

下载

在Gradle中添加依赖:

implementation 'com.yanzhenjie:sofia:1.0.5'

开发者也可以使用其它版本

Api

这里例如所有的Api,调用时结合具体的场景调用某几个方法即可,也可以一个都不调用,具体请参考Sample。
通用的用法是:

Sofia.with(Activity)
    ...;

调用with方法后返回一个Bar接口,可以链式连续调用所有方法,方法列表如下:

// 状态栏深色字体。
Bar statusBarDarkFont();

// 状态栏浅色字体。
Bar statusBarLightFont();

// 状态栏背景色。
Bar statusBarBackground(int statusBarColor);

// 状态栏背景Drawable。
Bar statusBarBackground(Drawable drawable);

// 状态栏背景透明度。
Bar statusBarBackgroundAlpha(int alpha);

// 导航栏背景色。
Bar navigationBarBackground(int navigationBarColor);

// 导航栏背景Drawable。
Bar navigationBarBackground(Drawable drawable);

// 导航栏背景透明度。
Bar navigationBarBackgroundAlpha(int alpha);

// 内容入侵状态栏。
Bar invasionStatusBar();

// 内容入侵导航栏。
Bar invasionNavigationBar();

// 让某一个View考虑状态栏的高度,显示在适当的位置,接受ViewId。
Bar fitsStatusBarView(int viewId);

// 让某一个View考虑状态栏的高度,显示在适当的位置,接受View。
Bar fitsStatusBarView(View view);

// 让某一个View考虑导航栏的高度,显示在适当的位置,接受ViewId。
Bar fitsNavigationBarView(View view);

// 让某一个View考虑导航栏的高度,显示在适当的位置,接受View。
Bar fitsNavigationBarView(View view);

fitsStatusBarView()一般用在产品详情页,假设需求如图三所示。在内容入侵状态栏后,我们的布局整体上移到状态栏,那么Toolbar的一部分也会显示在状态栏下方(层级),这个时候就需要Toolbar考虑系统状态栏的高度显示在适当的位置了;fitsNavigationBarView()同理,只是显示在屏幕的最底部(竖屏)或者最右侧(横屏)。

注意Sofia.with(Activity)调用后会返回一个Bar接口实例,开发者可以连续调用某几个方法。在页面滑动时如果需要再次改变SystemBar的颜色,那么开发者可以保存这个Bar实例为Activity的成员变量,也可以不保存,在重复改变时再次调用Sofia.with(Activity),此时还是会返回上次返回给开发者的Bar接口实例。

License

Copyright 2017 Yan Zhenjie

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

sofia's People

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

sofia's Issues

添加Sofia键盘模式失效问题

设置状态栏之后 在AndroidManifest设置activity的键盘模式为adjustResize 无效 注释掉状态栏之后就没问题 而且在布局里面设置fitsSystemWindows也会出现bug

小米(红米Note5)全面屏隐藏导航栏底部View没有隐藏的问题?

严大,现在用你最新的Demo跑起来,用小米的全面屏手机测试,我在GoodsDetailsActivity中加上了invasionNavigationBar();方法,想让全面屏关闭导航栏的时候 让底部View也隐藏掉,但是没有这个效果,我在之前的issues中也看到了这个问题,不过close掉了, 发现新的项目也存在这个问题,请问严大是我使用的姿势有问题么?求解答!谢谢
1
2
3

miui全面屏底部黑条问题

miui全面屏模式的情况下,底部出现黑条的问题怎么处理?如果直接隐藏导航栏是不太可行的啊,那些非全面屏模式的手机不能干掉底部导航栏。还有就是有的手机底部导航栏颜色是白色的,有的是黑色的。能不限制这种底部导航栏颜色吗?还是有什么处理方法?

状态栏和导航栏不能可选配置

你好,
如果我只是想要状态栏的效果,但是在返回HostLayout的时候直接去设置了导航栏的透明,我并不能控制。

如果为了达到一致的效果调用Sofia.with(this).navigationBarBackground(color(android.R.color.black))把状态栏设置成黑色,在横屏状态下会导致底部多一块黑色的view。

建议可以在with之后配置一些可选参数,以屏蔽部分功能

如何设置fragment状态栏为白色???

如何设置fragment状态栏为白色?
我跑了一下你的代码,如果设置fragment状态栏为白色,则无法看见状态栏中的时间,还有其它的状态。
如否实现fragment中的白色状态栏和状态栏深色字体activity效果?

padding失效

设置了状态栏颜色后,我的布局里的根布局设置的padding就失效了。

竖屏转换为横屏后,支持虚拟导航栏的手机问题

1.横竖屏切换后未因此底部自定义占位的导航栏
2.支持隐藏系统导航栏的手机隐藏导航栏后占位的导航栏view还在(建议监听下 decorView.setOnSystemUiVisibilityChangeListener根据具体情况进行展示和隐藏占位导航栏以及状态栏)

有个bug

在GoodsDetailsActivity类 的布局 xml 里面demo是根布局是framelayout ,然后我小米手机就不能滑动了,改成relativelayout 后就正常了, 还有布局里面最下面 的是toolbar, 如果换成其他布局如线性或相对布局就没有效果了,得到布局高度都是0........

隐藏状态栏没起作用

在调完这个后
Sofia.with(this)
.statusBarBackground(ContextCompat.getColor(this, R.color.blue))
.statusBarLightFont()
再隐藏状态栏,会不起作用
window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN)

键盘挡住文本框问题

如题,项目中一直没解决一个问题,就是键盘挡住文本框,怎么改都不行,后来别人说是不是用了沉浸状态栏,我把沉浸去掉了,马上就好了,可能是这个库内部做了什么处理吧,大家稍微注意下

严大,发现个软键盘的问题!

按照Sofia Demo中的代码集成到我的项目中,有个评论模块的界面需要 弹出软键盘的时候 把EditTextView显示到软键盘上面,我也设置了android:windowSoftInputMode="adjustResize" , 发现个问题,就是 当我用了Sofia之后 软键盘弹出的时候 EditText没有跟随软键盘上移, 我把Sofia的代码注释掉就可以上移了,不知道啥原因, 小米Note Android 6.0 MUI8 手机测试出来的问题,另外有个4.4的YouTaPhone 也是这样的问题。 严大 求解 谢谢!

在Fragment中使用遇到的问题

在Fragment中 AFragmen需要对状态栏进行渐变,BFragmen不需要渐变。

参考Demo中FragmenA、FragmentActivity,在布局中添加StatusView,

动态去修改StatusView的Alpha无效。

mStatusView.getBackground().mutate().setAlpha(alpha);

严大,报错了 ClassNotFoundException ?

看到Bugly上面显示的 说是:ClassNotFoundException ,手机型号也给出了 说是华为荣耀 PRA AL00X Android7.0 ,应该是客户使用过程中报的错 上传到了Bugly了 ,今天看到了这个错 但是不知道咋回事,还请严大看看,这是什么引起的呢?
1
2

状态栏字体闪烁

status.zip
你好,荣耀九8.0系统,在界面跳转的时候包括返回,状态栏字体会闪烁,(生成的gif看不到效果,所以视频我放到压缩包里面了,见谅)

某些页面失效

某些页面必须放在setContentView后面,而某些页面就不需要

4.4~5.0之间的版本兼容

你好,
请问不支持4.4~5.0之间的版本吗?
4.4版本以上就可以设置FLAG_TRANSLUCENT_STATUS了

DrawerLayout侧边栏问题

image
设置之后再魅蓝6上面侧边栏并没有侵入状态栏,然后再华为的手机上和oppo的手机上又发现没有问题,

荣耀9青春版,调用出现data parcel size 1045020 bytes 过大异常

06-21 18:56:07.082 16288-16288/com.gbei W/System.err: java.lang.RuntimeException: android.os.TransactionTooLargeException: data parcel size 1045020 bytes at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4611) at android.os.Handler.handleCallback(Handler.java:808) at android.os.Handler.dispatchMessage(Handler.java:101) at android.os.Looper.loop(Looper.java:166) at android.app.ActivityThread.main(ActivityThread.java:7425) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:245) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:921) Caused by: android.os.TransactionTooLargeException: data parcel size 1045020 bytes at android.os.BinderProxy.transactNative(Native Method) 06-21 18:56:07.083 16288-16288/com.gbei W/System.err: at android.os.BinderProxy.transact(Binder.java:751) at android.app.IActivityManager$Stub$Proxy.activityStopped(IActivityManager.java:4644) at android.app.ActivityThread$StopInfo.run(ActivityThread.java:4603) ... 7 more 06-21 18:56:07.127 16288-16288/com.gbei I/Process: Sending signal. PID: 16288 SIG: 9

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.