美文网首页Android
背景图延伸到状态栏

背景图延伸到状态栏

作者: jjkopen | 来源:发表于2016-05-10 15:02 被阅读1840次

    尝试各种MD中
    这里只实现图片延伸

    • application里面主题是 android:theme="@style/AppTheme"

    状态栏背景透明

    • getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

    将要延伸的布局设置属性

    ViewGroup rootView = (ViewGroup) ((ViewGroup) findViewById(R.id.rootview));
    rootView.setFitsSystemWindows(true); 
    rootView.setClipToPadding(true);  
    

    rootview是最上面的子布局,我的rootview是AppBarLayout,按需求切换


    Toolbar未设置透明色,所以是蓝色.
    AppBarLayout=Toolbar+TabLayout,AppBarLayout的背景是下面的图片

    这样子整个布局就上去了,发现状态栏效果是透明的一层贴图,整个下面布局顶到了屏幕上边框.我们要的效果是图片延伸上去,控件照旧.所以就在原布局里面的最上面加一个和状态栏一样大小的透明view,然后设置背景图.

    添加view后的代码(oncreate部分完整代码)###

    //状态栏透明
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    // 生成一个状态栏大小的矩形
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    int statusBarHeight = getResources().getDimensionPixelSize(resourceId);
    // 绘制一个和状态栏一样高的矩形
    View statusView = new View(this);
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,statusBarHeight);
    statusView.setLayoutParams(params);
    statusView.setBackgroundColor(Color.TRANSPARENT);
    // 添加 statusView 到布局中
    ViewGroup rootView = (ViewGroup) ((ViewGroup) findViewById(R.id.rootview));
    rootView.addView(statusView, 0);// addView(ViewGroup view, index);
    rootView.setFitsSystemWindows(true);
    rootView.setClipToPadding(true);
    ...
    // 顺便把Toolbar的颜色设置为透明
    ...
    

    PS1. 学习自Android App 沉浸式状态栏解决方案##

    PS2. 我的手机是小米,按网上的说法和其他手机状态栏显示有阴影效果的差距.##

    PS3. 非原创,自己笔记用于小伙伴交流##

    相关文章

      网友评论

        本文标题:背景图延伸到状态栏

        本文链接:https://www.haomeiwen.com/subject/uglyrttx.html