Comments (12)
看报错信息不像是设置状态栏导致的问题呢,你找到具体出错的地方了么
from statusbarutil.
我用debug跟踪了一下 decorView.removeViewAt(count - 1); 执行完这一行代码后会有异常 如果不remove 而是设置为GONE的话则不会有异常了
@TargetApi(Build.VERSION_CODES.KITKAT)
private static void clearPreviousSetting(Activity activity) {
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
int count = decorView.getChildCount();
if (count > 0 && decorView.getChildAt(count - 1) instanceof StatusBarView) {
// decorView.removeViewAt(count - 1);
View view = decorView.getChildAt(count - 1);
view.setVisibility(View.GONE);
ViewGroup rootView = (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
rootView.setPadding(0, 0, 0, 0);
}
}
from statusbarutil.
@laobie 现在我在 setColor里面判断如果StatusBarView 为GENO的话那我先移除然后在进行重新添加,简单的测试了一下正常使用是没有问题的,,猴哥你看一下会不会有什么其它影响
public static void setColor(Activity activity, @ColorInt int color, int statusBarAlpha) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
activity.getWindow().setStatusBarColor(calculateStatusColor(color, statusBarAlpha));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
int count = decorView.getChildCount();
View view = decorView.getChildAt(count - 1);
if (count > 0 && view instanceof StatusBarView) {
if (view.getVisibility() != View.GONE){
decorView.getChildAt(count - 1).setBackgroundColor(calculateStatusColor(color, statusBarAlpha));
}else {
decorView.removeView(view);
StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
decorView.addView(statusView);
}
} else {
StatusBarView statusView = createStatusBarView(activity, color, statusBarAlpha);
decorView.addView(statusView);
}
setRootView(activity);
}
}
from statusbarutil.
@Jimmy-J
clearPreviousSetting 这个方法有问题吧
setColor()
方法处理应该没问题的
from statusbarutil.
@Jimmy-J 你的界面是用 fragment 来做的么
from statusbarutil.
@laobie 是的界面是使用的 fragment 来做的,要实现的效果就是类似手机 qq 空间那种,需要全屏图片展示和有导航栏展示两种互换
from statusbarutil.
@laobie 是的 我跟了一下 clearPreviousSetting() 这个方法 decorView.removeViewAt(count - 1) 执行过这句后就会抛出一个空指针,现在猜想会不会是哪个 ViewGroup 去获取它的时候 它已经被移除了导致的,不过还没什么收获。现在暂时在clearPreviousSetting()里面先GONE 然后放到setColor里面去remove了
from statusbarutil.
@Jimmy-J 确实有点奇怪,你要能将你这做成一个 demo 的话,我可以测试下= =
from statusbarutil.
@laobie 我把demo发到 [email protected] 你这个邮箱了,你有时间的话帮忙看看 非常感谢
from statusbarutil.
@Jimmy-J 好的
from statusbarutil.
确实会这样 在fragment里先调用setColor()然后再调用setTransparentForImageViewInFragment()就会崩溃
我是这样解决的:
handler.post(new Runnable() { @Override public void run() { StatusBarUtil.setTransparentForImageViewInFragment(); } });
把方法调用同步到UI线程里 不用改动源代码即可避免crash 而且目前运作良好
from statusbarutil.
setColorNoTranslucent 和setDarkMode 一起使用在4.4.0 、4.4.1、4.4.2 都会报NullPointerException , Process: com.luojilab.player, PID: 16636
java.lang.NullPointerException
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2952)
at android.view.View.draw(View.java:14529)
at android.widget.FrameLayout.draw(FrameLayout.java:472)
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:2518)
at android.view.View.getDisplayList(View.java:13423)
at android.view.View.getDisplayList(View.java:13465)
at android.view.HardwareRenderer$GlRenderer.buildDisplayList(HardwareRenderer.java:1570)
at android.view.HardwareRenderer$GlRenderer.draw(HardwareRenderer.java:1449)
at android.view.ViewRootImpl.draw(ViewRootImpl.java:2662)
at android.view.ViewRootImpl.performDraw(ViewRootImpl.java:2529)
at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2158)
at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1227)
at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6256)
at android.view.Choreographer$CallbackRecord.run(Choreographer.java:761)
at android.view.Choreographer.doCallbacks(Choreographer.java:574)
at android.view.Choreographer.doFrame(Choreographer.java:544)
at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:747)
at android.os.Handler.handleCallback(Handler.java:733)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:136)
at android.app.ActivityThread.main(ActivityThread.java:5110)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:515)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:702)
at dalvik.system.NativeStart.main(Native Method)
@laobie 有什么解决方案了吗??
from statusbarutil.
Related Issues (20)
- 关于toolbar陷入到状态栏问题 HOT 5
- 请问是否支持androidx HOT 3
- 请问下如果想跟随滑动变化状态栏背景透明度且需要白色和黑色字体切换怎么实现啊 HOT 1
- 评论错项目了 HOT 1
- StatusBarUtil.setLightMode(this) => Toolbar goes behind statusBar HOT 1
- setDarkMode() 無效 HOT 1
- java.lang.ClassCastException(StatusBarUtil.clearPreviousSetting(StatusBarUtil.java:582))
- 软键盘导致ToolBar拉伸
- 使用之后,设置底部虚拟按键的背景颜色,设置不了
- calculateStatusColor() 算法问题
- setDarkMode 和 setLightMode 会使 布局向上偏移,设置fitsSystemWindows会使Edittextview长按上下文菜单边距失效 HOT 2
- 异形屏statusbar高度太低,导致内容被覆盖 HOT 1
- Status bar
- 有个StatusBarUtils的报错 能看下么 HOT 2
- 不维护了?什么时候适配水滴和挖孔屏
- 报错问题
- 1.5.1版本build失败
- 小米V130 com.jaeger.library.StatusBarUtil.setLightMode 报错org.json.JSONException: No value for cezanne
- 在清单文件里设置 android:windowSoftInputMode="adjustResize|stateHidden"软键盘不会顶起布局导致输入框被遮挡
- 兄弟们,这个库作者好久没更新了,有没有其他的同类型的优秀库推荐一下啊,快来交流一下 HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from statusbarutil.