msdx / status-bar-compat

A compatible library for setting status bar color. Support MIUI, Flyme, EMUI3.1. 一行代码调用,布局零入侵。兼容小米,魅族,华为……

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

状态栏下出现白条

wangxiaguang102 opened this issue · comments

您好!
#华为p7手机,系统为5.11,状态栏颜色可以调整,
但是紧挨着状态栏的位置出现一条白色长条(高度等于状态栏高度)

请附图

您好,github一直上传不成功,是否方便发你邮箱

可以

应该没有5.11这个版本,你系统版本是不是打错了

是5.1.1版本,bug的截图已经发至邮箱

@wangxiaguang102 请问您发的是哪个邮箱?我好像没在我的邮箱中看到。

请问这个问题解决了吗?我也出现这问题了 三星的手机

不是机型的问题 我另外开个工程 就不会出现白条 可能是Android 版本限制了

@wangxiaguang102 @chen-krolser 使用项目里的demo是否有同样的问题?

项目里的demo导入提示找不到指定文件

找不到哪个指定文件?

library\build.gradle这个

@chen-krolser 怎么会呢?这个文件就在里面啊,没理由找不到这个文件的。你是不是看错日志所表达的意思了?

@chen-krolser 能把日志post上来吗?

是versionCode识别不出来 手动直接改下就好了 demo里面没问题

demo运行起来没问题?有出现白条吗?另外请问你的系统android版本号也是5.1.1吗?

没出现白条 demo是继承AppCompatActivity 我项目是自定义的actionbar类继承FragmentActivity

按理来说AppCompatActivity也是继承的FragmentActivity 但是不知为什么我的会出现白条

那请你检查以下几个地方:

  • 对应的Activity的Theme(如果没有,则是application的theme配置)
  • Activity里的根布局用的是哪一个?
  • 是否有用到Window.ID_ANDROID_CONTENTandroid.id.R.content
  • StatusBarCompat的调用的位置

theme是Theme.AppCompat.Light.NoActionBar,activity布局也没有引用其他theme,content都没用到,StatusBarCompat调用位置也是在申明布局之后

@chen-krolser 请问你使用的根布局是哪一个?
或者能不能写一个小的demo复现一下该问题,传到github上来?

@chen-krolser 请问你是之前为透明状态栏,然后再设置颜色的吗?

@wangxiaguang102 @chen-krolser 我自己复现出了一个同样的情况。查了一下,使用了AppCompat的主题,在android.R.id.content的ViewGroup上面还会有一层ActionBarOverlayLayout。布局结构大致如下:

DecorView
--LinearLayout (fitsSystemWindows为true)
----ViewStub
----FrameLayout
------ActionBarOverlayLayout (fitsSystemWindows 为true)
--------ContentFrameLayout(id为android.R.id.content)
----------你的布局
--------ActionBarContainer
----------Toolbar

如果状态栏透明,DecorView下的LinearLayout会设置一个大小为状态栏高度的paddingTop
当修改了状态栏使它不透明之后,LinearyLayout的padding置为0,但是ActionBarContainer多了一个与状态栏高度同样大小的marginTop。把它的marginTop设为0之后恢复正常。

@wangxiaguang102 @chen-krolser 请尝试以下代码能否解决问题?

        View view = findViewById(android.support.v7.appcompat.R.id.action_bar_container);
        if (view != null) {
            ViewGroup.LayoutParams params = view.getLayoutParams();
            if (params instanceof ViewGroup.MarginLayoutParams) {
                ((ViewGroup.MarginLayoutParams)params).topMargin = 0;
                view.setLayoutParams(params);
            }
        }

如果可以请告知,我将更新版本。

已更新0.6版本,请尝试调用

StatusBarCompat.resetActionBarContainerTopMargin(getWindow());

如果不行,请尝试调用

StatusBarCompat.resetActionBarContainerTopMargin(getWindow(), android.support.v7.appcompat.R.id.action_bar_container);