Изменение цвета в верхней панели (colorPrimaryDark)

95
19 марта 2022, 09:10

У меня есть фрагменты, и при нажатии на любой фрагмент в верхней части панели (там, где часы) должен измениться цвет. Как реализовать?

public class MainPagerAdapter extends FragmentStatePagerAdapter {
private final static int COUNT = 3;
private final static int HORIZONTAL = 0;
private final static int TWO_WAY = 1;
private final static int TWO_WAY1 = 2;
public MainPagerAdapter(final FragmentManager fm) {
    super(fm);
}
@Override
public Fragment getItem(final int position) {
    switch (position) {
        case TWO_WAY:
            return new HorizontalPagerFragment_bookmarks();
        case TWO_WAY1:
            return new HorizontalPagerFragment_exit();
        case HORIZONTAL:
            return new HorizontalPagerFragment();
        default:
    }
    return getItem(position);
}

@Override
public int getCount() {
    return COUNT;
}

}

public class HorizontalPagerFragment_bookmarks extends Fragment {

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

public void setStatusBarColor(int color) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
        return;
    }
    Window window = getActivity().getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(ContextCompat.getColor(getActivity(), color));
}

}

Answer 1

1. Метод разместите в активности

public void setStatusBarColor(int color) {
    if(Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { return; }
    Window window = getWindow();
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    window.setStatusBarColor(ContextCompat.getColor(this, color));
}

2. В onCreate активности повесьте слушатель на табы

tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener(){
@Override
public void onTabSelected(TabLayout.Tab tab){
    if(tab.getPosition() == 0){
        //красим статусбар цветом tab1 при клике на первый таб
        setStatusBarColor(R.color.tab1);
    }
    else{
        //и цветом tab2 при клике на второй таб
        setStatusBarColor(R.color.tab2);
    }
}
});
READ ALSO
Как вынести расчет в отдельный метод?

Как вынести расчет в отдельный метод?

У меня вопрос по алгоритмуДелаю линеаризацию

112
Почему не работают события hover?

Почему не работают события hover?

Не могу понять почему не работает вот такого вида событие hover

116
Картинку и цвет фоном

Картинку и цвет фоном

Как наложить цвет поверх логотипа через CSS, как на картинке?

92
Как запустить процесс nohup через php скрипт?

Как запустить процесс nohup через php скрипт?

Хочу через php скрипт запустить работу в фоне другого скрипта, для этого в script_1php пишу такой код:

99