laobie / StatusBarUtil

A util for setting status bar style on Android App.
http://t.cn/Rq746Kb
Apache License 2.0
8.82k stars 1.72k forks source link

setTranslucentForImageViewInFragment + setLightMode 6.0以上版本多出 fadebar #194

Closed LouisMari1991 closed 6 years ago

LouisMari1991 commented 6 years ago

在 UseInFragmentActivity.java 增加 setLightMode(this) , 华为8.0手机上多出 fade_bar

去掉 setLightMode(this) 则显示正常, 有什么解决办法吗?

764260970963420006

package com.jaeger.statusbarutil;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
import com.ashokvarma.bottomnavigation.BottomNavigationBar;
import com.ashokvarma.bottomnavigation.BottomNavigationItem;
import com.jaeger.library.StatusBarUtil;
import com.jaeger.statusbardemo.R;
import java.util.ArrayList;
import java.util.Random;

/**
 * Created by Jaeger on 16/8/11.
 *
 * Email: chjie.jaeger@gmail.com
 * GitHub: https://github.com/laobie
 */
public class UseInFragmentActivity extends BaseActivity {
  private ViewPager mVpHome;
  private BottomNavigationBar mBottomNavigationBar;
  private ArrayList<Fragment> mFragmentList = new ArrayList<>();

  @Override protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_use_in_fragment);
    mVpHome = (ViewPager) findViewById(R.id.vp_home);
    mBottomNavigationBar = (BottomNavigationBar) findViewById(R.id.bottom_navigation_bar);
    mBottomNavigationBar.addItem(new BottomNavigationItem(R.drawable.ic_favorite, "One"))
        .addItem(new BottomNavigationItem(R.drawable.ic_gavel, "Two"))
        .addItem(new BottomNavigationItem(R.drawable.ic_grade, "Three"))
        .addItem(new BottomNavigationItem(R.drawable.ic_group_work, "Four"))
        .initialise();

    mBottomNavigationBar.setTabSelectedListener(new BottomNavigationBar.OnTabSelectedListener() {
      @Override public void onTabSelected(int position) {
        mVpHome.setCurrentItem(position);
      }

      @Override public void onTabUnselected(int position) {

      }

      @Override public void onTabReselected(int position) {

      }
    });

    mFragmentList.add(new SimpleFragment());
    mFragmentList.add(new SimpleFragment());
    mFragmentList.add(new SimpleFragment());
    mFragmentList.add(new SimpleFragment());

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

      }

      @Override public void onPageSelected(int position) {
        mBottomNavigationBar.selectTab(position);
        switch (position) {
          case 0:
            break;
          default:
            Random random = new Random();
            int color = 0xff000000 | random.nextInt(0xffffff);
            if (mFragmentList.get(position) instanceof SimpleFragment) {
              ((SimpleFragment) mFragmentList.get(position)).setTvTitleBackgroundColor(color);
            }
            break;
        }
      }

      @Override public void onPageScrollStateChanged(int state) {

      }
    });
    mVpHome.setAdapter(new FragmentPagerAdapter(getSupportFragmentManager()) {
      @Override public Fragment getItem(int position) {
        return mFragmentList.get(position);
      }

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

  @Override protected void setStatusBar() {
    StatusBarUtil.setTranslucentForImageViewInFragment(UseInFragmentActivity.this, 0, null);
    StatusBarUtil.setLightMode(this);
  }
}
package com.jaeger.statusbarutil;

import android.os.Bundle;
import android.support.annotation.ColorInt;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.jaeger.statusbardemo.R;

/**
 * Created by Jaeger on 16/8/11.
 *
 * Email: chjie.jaeger@gmail.com
 * GitHub: https://github.com/laobie
 */
public class SimpleFragment extends Fragment {
  private TextView mTvTitle;
  private View mFakeStatusBar;

  @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
      @Nullable Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragement_simple, container, false);
  }

  @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mTvTitle = (TextView) view.findViewById(R.id.tv_title);
    mFakeStatusBar = view.findViewById(R.id.fake_status_bar);
  }

  public void setTvTitleBackgroundColor(@ColorInt int color) {
    //mTvTitle.setBackgroundColor(color);
    mFakeStatusBar.setBackgroundColor(color);
  }
}
laobie commented 6 years ago

= = 这个我看一下,你尝试下交换两个方法的先后顺序呢

LouisMari1991 commented 6 years ago

交换了两个方法之后, setLightMode(this) 就没有效果了,状态栏的字体是白色而不是黑色.

treanow commented 6 years ago

UseInFragmentActivity的优点是可以设置fade状态栏为渐变色资源文件,但是setLightMode(this) 和 UseInFragmentActivity一起用会有问题,比如设置成Fragment的假状态栏设置成白色,字体想变成黑色的需求,楼主有办法解决吗 我也研究研究,谢谢

treanow commented 6 years ago

应该是走了两遍setSystemUiVisibility方法,这样设置下就行了 default 然后在UseInFragmentActivity只调用一次这个就行了 ( 设置与否是字体黑色) StatusBarUtil.setTransparentForImageViewInFragment(UseInFragmentActivity.this, null,true);

LouisMari1991 commented 6 years ago

能贴出更详细的代码吗?看的不太明白。。。

laobie commented 6 years ago

@MariShunxiang 这是一个 bug 我晚点提交一个版本 你试一下

laobie commented 6 years ago

@MariShunxiang @treanow 1.5.1 版本发布了 可以测试下

LouisMari1991 commented 6 years ago

好滴好滴,给大佬疯狂打电话~

laobie commented 6 years ago

@MariShunxiang 验证了可以了没?

LouisMari1991 commented 6 years ago

可以了,多谢~