复杂布局使用Immersionbar无法实现状态栏沉浸式,求支援!

Fragment中CoordinatorLayout+AppBarLayout+CollapsingToolbarLayout复杂布局使用Immersionbar无法实现状态栏沉浸式。

img

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/black">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <androidx.viewpager.widget.ViewPager
            android:id="@+id/vp"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:layout_behavior="@string/appbar_scrolling_view_behavior">
        </androidx.viewpager.widget.ViewPager>

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/center_appbar_layout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:elevation="0dp"
            android:fitsSystemWindows="true">

            <com.google.android.material.appbar.CollapsingToolbarLayout
                android:id="@+id/collapsing_toobar"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:contentScrim="@color/colorPrimary"
                app:layout_scrollFlags="scroll|exitUntilCollapsed"
                app:collapsedTitleGravity="left"
                app:expandedTitleMarginTop="185dp"
                app:expandedTitleGravity="left"
                app:expandedTitleMarginStart="30dp">

                <LinearLayout
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:orientation="vertical">
                    <ImageView
                        android:layout_width="match_parent"
                        android:layout_height="@dimen/dp_300"
                        android:gravity="center"
                        android:scaleType="fitXY"
                        app:layout_scrollFlags="scroll"
                        android:src="@mipmap/icon_default_user"/>
                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:orientation="vertical"
                        android:layout_margin="@dimen/dp_10">
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="阿伟哈皮"
                            android:textColor="@color/white"
                            android:textSize="@dimen/sp_18"
                            android:textStyle="bold"/>
                        <LinearLayout
                            android:layout_width="match_parent"
                            android:layout_height="wrap_content"
                            android:gravity="bottom">
                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text="1关注"
                                android:textSize="@dimen/sp_14"
                                android:textColor="@color/white"/>
                            <TextView
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:text="1被关注"
                                android:layout_marginStart="@dimen/dp_10"
                                android:textSize="@dimen/sp_14"
                                android:textColor="@color/white"/>
                            <LinearLayout
                                android:layout_width="match_parent"
                                android:layout_height="wrap_content"
                                android:orientation="vertical"
                                android:layout_marginStart="@dimen/dp_10">
                                <TextView
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="+2"
                                    android:layout_marginStart="@dimen/dp_20"
                                    android:textColor="@color/red"/>
                                <TextView
                                    android:layout_width="wrap_content"
                                    android:layout_height="wrap_content"
                                    android:text="6人气"
                                    android:textSize="@dimen/sp_14"
                                    android:textColor="@color/white"/>
                            </LinearLayout>
                        </LinearLayout>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="21/170/60"
                            android:textSize="@dimen/sp_14"
                            android:textColor="@color/light_gray"
                            android:layout_marginTop="@dimen/dp_10"
                            android:drawablePadding="@dimen/dp_10"
                            android:drawableLeft="@mipmap/icon_white_user"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="北京"
                            android:textSize="@dimen/sp_14"
                            android:textColor="@color/light_gray"
                            android:layout_marginTop="@dimen/dp_10"
                            android:drawablePadding="@dimen/dp_10"
                            android:drawableLeft="@mipmap/icon_white_location"/>
                        <TextView
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:text="你还没有填写个人介绍,点击添加"
                            android:textSize="@dimen/sp_14"
                            android:textColor="@color/light_gray"
                            android:layout_marginTop="@dimen/dp_10"
                            android:drawablePadding="@dimen/dp_10" />
                    </LinearLayout>

                </LinearLayout>
                <androidx.appcompat.widget.Toolbar
                    android:id="@+id/toolbar"
                    android:layout_width="match_parent"
                    android:layout_height="@dimen/dp_40"
                    app:layout_collapseMode="pin">

                    <LinearLayout
                        android:layout_width="match_parent"
                        android:layout_height="wrap_content"
                        android:layout_marginRight="@dimen/dp_30"
                        android:gravity="right">
                        <ImageView
                            android:id="@+id/img_right"
                            android:layout_width="@dimen/dp_24"
                            android:layout_height="@dimen/dp_32"
                            android:layout_gravity="right"
                            android:src="@mipmap/icon_list_setting" />
                    </LinearLayout>

                </androidx.appcompat.widget.Toolbar>


            </com.google.android.material.appbar.CollapsingToolbarLayout>

            <com.flyco.tablayout.CommonTabLayout
                android:id="@+id/tablayout"
                android:layout_width="match_parent"
                android:layout_height="@dimen/dp_40"
                app:tl_iconVisible="false"
                app:tl_textBold="SELECT"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:tl_indicator_width="@dimen/dp_70"
                app:tl_indicator_color="@color/white"
                app:tl_indicator_height="@dimen/dp_2"
                app:tl_textsize="@dimen/sp_16"
                app:tl_textSelectColor="@color/white"
                app:tl_textUnselectColor="@color/white">
            </com.flyco.tablayout.CommonTabLayout>
        </com.google.android.material.appbar.AppBarLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</LinearLayout>

package com.example.gw.xlp.feature.mine.fragment;

import com.example.gw.xlp.R;
import com.example.gw.xlp.component.widget.TabEntity;
import com.example.gw.xlp.component.widget.base.BaseFragment;
import com.flyco.tablayout.CommonTabLayout;
import com.flyco.tablayout.listener.CustomTabEntity;
import com.flyco.tablayout.listener.OnTabSelectListener;

import java.util.ArrayList;

import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import androidx.viewpager.widget.ViewPager;
import butterknife.BindView;

public class MyPageFragment extends BaseFragment {


    MyPagerAdapter mAdapter;
    private final ArrayList<Fragment> mFragments = new ArrayList<>();
    private final String[] mTitles = {
            "动态", "私密", "喜欢"
    };
    @BindView(R.id.tablayout)
    CommonTabLayout mTl3;
    @BindView(R.id.vp)
    ViewPager mVp;
    @BindView(R.id.toolbar)
    Toolbar mToolbar;
    private ArrayList<CustomTabEntity> mTabEntities = new ArrayList<>();

    public static MyPageFragment getInstance() {
        MyPageFragment sf = new MyPageFragment();
        return sf;
    }


    @Override
    protected int getContentViewLayoutID() {
        return R.layout.fragment_my;
    }


    @Override
    protected void initViewAndData() {
        mFragments.add(new DynamicFragment());
        mFragments.add(new DynamicFragment());
        mFragments.add(new DynamicFragment());
        for (int i = 0; i < mTitles.length; i++) {
            mTabEntities.add(new TabEntity(mTitles[i], 0, 0));
        }
        mTl3.setTabData(mTabEntities);
        mTl3.setOnTabSelectListener(new OnTabSelectListener() {
            @Override
            public void onTabSelect(int position) {
                mVp.setCurrentItem(position);
            }

            @Override
            public void onTabReselect(int position) {
            }
        });

        mVp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {

                mTl3.setCurrentTab(position);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        mVp.setAdapter(new MyPagerAdapter(getChildFragmentManager()));
        mVp.setCurrentItem(0);
    }


    private class MyPagerAdapter extends FragmentPagerAdapter {
        public MyPagerAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public int getCount() {
            return mFragments.size();
        }

        @Override
        public CharSequence getPageTitle(int position) {
            return mTitles[position];
        }

        @Override
        public Fragment getItem(int position) {
            return mFragments.get(position);
        }
    }
}

/**
* 沉浸式状态栏
* */
public static void fullScreen(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
//5.x开始需要把颜色设置透明,否则导航栏会呈现系统默认的浅灰色
Window window = activity.getWindow();
View decorView = window.getDecorView();
//两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间
int option =
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
decorView.setSystemUiVisibility(option);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(Color.TRANSPARENT);
//导航栏颜色也可以正常设置
// window.setNavigationBarColor(Color.TRANSPARENT);
} else {
Window window = activity.getWindow();
WindowManager.LayoutParams attributes = window.getAttributes();
int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
// int flagTranslucentNavigation = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION;
attributes.flags |= flagTranslucentStatus;
// attributes.flags |= flagTranslucentNavigation;
window.setAttributes(attributes);
}
}
}

ImmersionBar.setTitleBar(this,mToolbar),没看到你在代码里调用ImmersionBar

基类Fragment


package com.example.gw.xlp.component.widget.base;

import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.example.gw.xlp.R;
import com.gyf.immersionbar.ImmersionBar;
import com.gyf.immersionbar.components.SimpleImmersionFragment;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;
import butterknife.ButterKnife;
import butterknife.Unbinder;

public abstract class BaseFragment extends SimpleImmersionFragment {

    public AppCompatActivity context;
    private Unbinder unbinder;
    AlertDialog loadingDialog;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        if (getContentViewLayoutID() != 0) {
            return inflater.inflate(getContentViewLayoutID(), container, false);
        } else {
            return super.onCreateView(inflater, container, savedInstanceState);
        }
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        context = (AppCompatActivity) getContext();
    }

    @Override
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        //绑定控件
        unbinder = ButterKnife.bind(this, view);
        //初始化沉浸式,默认透明状态栏和黑色导航栏
        initViewAndData();
    }

    @Override
    public void initImmersionBar() {
        ImmersionBar.with(this).navigationBarColor(R.color.black).init();
    }

    public void dismissLoadingDialog() {
        if (loadingDialog != null) {
            loadingDialog.dismiss();
        }
        loadingDialog = null;

    }

    @Override
    public void onHiddenChanged(boolean hidden) {
        super.onHiddenChanged(hidden);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //解绑控件
        unbinder.unbind();
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
    }

    /**
     * 设置 LayoutID
     *
     * @return
     */
    protected abstract int getContentViewLayoutID();

    /**
     * 界面初始化
     */
    protected abstract void initViewAndData();

    /**
     * startActivity
     *
     * @param clazz
     */
    protected void readyGo(Class<?> clazz) {
        Intent intent = new Intent(getActivity(), clazz);
        startActivity(intent);
    }

    /**
     * startActivity with bundle
     *
     * @param clazz
     * @param bundle
     */
    protected void readyGo(Class<?> clazz, Bundle bundle) {
        Intent intent = new Intent(getActivity(), clazz);
        if (null != bundle) {
            intent.putExtras(bundle);
        }
        startActivity(intent);
    }

    /**
     * startActivityForResult
     *
     * @param clazz
     * @param requestCode
     */
    protected void readyGoForResult(Class<?> clazz, int requestCode) {
        Intent intent = new Intent(getActivity(), clazz);
        startActivityForResult(intent, requestCode);
    }

    /**
     * startActivityForResult with bundle
     *
     * @param clazz
     * @param requestCode
     * @param bundle
     */
    protected void readyGoForResult(Class<?> clazz, int requestCode, Bundle bundle) {
        Intent intent = new Intent(getActivity(), clazz);
        if (null != bundle) {
            intent.putExtras(bundle);
        }
        startActivityForResult(intent, requestCode);
    }


    protected void readyGoThenKill(Class<?> clazz) {
        readyGoThenKill(clazz, null);
    }

    protected void readyGoThenKill(Class<?> clazz, Bundle bundle) {
        readyGo(clazz, bundle);
        getActivity().finish();
    }

}