简体   繁体   中英

Change background color of android action bar at runtime

I'm trying to change the background color of android action bar at runtime, according to an image VibrantColor.

I found some references, but neither worked for me.

Change action bar color in android

How do I change the background color of the ActionBar of an ActionBarActivity using XML?

I have this code to get the color from the image, and it works.

public int getImageColor(Bitmap foto) {
    Palette palette = Palette.generate(foto);

    List<Palette.Swatch> swatchList = palette.getSwatches();

    int maiorPopulação = 0;

    int color = 0;

    for (Palette.Swatch sw : swatchList){
        if (sw.getPopulation() > maiorPopulação) {
            maiorPopulação = sw.getPopulation();
            color = sw.getRgb();
        }
    }

    return palette.getVibrantColor(color);
}

Then I try to set the returned color to the ActionBar:

public static void alteraCor(Fragment fragmento, int color) {
    ActionBarActivity atividade = (ActionBarActivity)fragmento.getActivity();

    android.support.v7.app.ActionBar actionBar = atividade.getSupportActionBar();

    if ( fragmento instanceof Detalhes )
        actionBar.setBackgroundDrawable(new ColorDrawable(Color.rgb(
                Color.red(color),
                Color.green(color),
                Color.blue(color)
            )));
        else
            actionBar.setBackgroundDrawable(new ColorDrawable(fragmento.getResources().getColor(R.color.fundoEscuro)));
    }

I called alteraCor from onCreate and from onAttach on Fragment, but neither of them worked.

EDIT:

I use the folowing Style:

    <style name="VendasFacil" parent="@style/Theme.AppCompat">
        <item name="android:textColor">@color/Fonte</item>
        <item name="android:background">@color/fundoPrimeiroPlano</item>
        <item name="android:windowBackground">@color/fundoPrimeiroPlano</item>
        <item name="actionBarTheme">@style/VendasFacil.ActionBar</item>
        <item name="android:actionBarTheme" tools:ignore="NewApi">@style/VendasFacil.ActionBar</item>
    </style>

    <style name="VendasFacil.ActionBar" parent="@style/Widget.AppCompat.ActionBar">
        <item name="android:background">@color/fundoEscuro</item>
        <item name="android:displayOptions">showHome|homeAsUp|showTitle</item>
        <item name="displayOptions">showHome|homeAsUp|showTitle</item>
        <item name="android:homeAsUpIndicator">@drawable/ic_launcher</item>
        <item name="homeAsUpIndicator">@drawable/ic_drawer</item>
    </style>

I do not have the color I want to use as background previously to put it in a style file. It is as if the color was defined by the user at runtime.

You will need to create a style for that. You can then change the style at runtime to have the actionbar reflect it.

This might be useful: http://developer.android.com/guide/topics/ui/actionbar.html#AdvancedStyles

Here is an example of a style changing the actionbar color:

<style name="MyActionBar" parent="@android:style/Widget.Holo.Light.ActionBar">
        <item name="android:background">ANY_HEX_COLOR_CODE</item>
</style>

You can use Android Action Bar Style Generator . It's generate XML files. Copy to your project. It's easy and nice.

Hey there appears to be a small bug in your code:

actionBar.setBackgroundDrawable(new ColorDrawable(Color.rgb(
        Color.red(color),
        Color.green(color),
        Color.blue(color)
    )));

Your are setting the r the g and the b value to the hex value of the color. What you need to do instead is simply:

actionBar.setBackgroundDrawable(new ColorDrawable(color));

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM