Изменить цвет панели действий программно более одного раза

Я использую

getSherlockActivity().getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00ACED));

Чтобы изменить цвет моей панели действий в фрагменте, и это работает. Но если я открою этот фрагмент, то открою другой фрагмент, который вызывает этот метод с другим цветом, панель действий не изменится на нужный цвет. Вместо этого он превращается в белый цвет вместо того цвета, на который я его установил.

7 ответов

Решение

Это быстрое решение, которое я нашел

mActionBar.setBackgroundDrawable(new ColorDrawable(0xff00DDED));
mActionBar.setDisplayShowTitleEnabled(false);
mActionBar.setDisplayShowTitleEnabled(true);

Попробуй это,

Method1:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(0xff00FFED));

Method2:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(getResources()
                    .getColor(R.color.bg_color)));

method3:

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#3A1212")));

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

Это определенно исправило это:

bar.setBackgroundDrawable(new ColorDrawable(getResources()
                    .getColor(R.color.app_bar_online)));

Вместо прямой ссылки на цвет делаю new ColorDrawable(R.color.app_bar_online)

getColor устарела. использовать ContextCompat:

bar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(context, R.color.app_bar_online)));

Если вы хотите установить цвет панели действий и выбрать цвет в виде строки, мне кажется, это работает.

    getSupportActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor("#993b3c4e")));

Возможно, вам придется включить и отключить заголовок, чтобы он обновлялся / отображался правильно, как в ответе пользователя 1634451, но в моем случае мне это не нужно.

Если вы хотите избежать устаревания, вы можете использовать

val mActionBar: ActionBar? = supportActionBar    
mActionBar.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this, R.color.red)))

Котлинский язык

Если вы хотите прагматично изменить цвет панели действий или фон, просто используйте,

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                getSupportActionBar().setBackgroundDrawable(getDrawable(R.drawable.white_background));
            }

white_background.xml

<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#fff" />

((AppCompatActivity) getActivity()). GetSupportActionBar(). SetBackgroundDrawable(новый ColorDrawable(getResources(). GetColor(R.color.colorPrimary)));

Во фрагменте и Java

Другие вопросы по тегам