web-dev-qa-db-fra.com

Style de la barre d'action AppCompat

J'essaie actuellement d'utiliser AppCompat au lieu d'ActionbarSherlock. Sur les appareils Android 4+, je ne rencontre aucun problème, car les thèmes Actionbar et Holo sont utilisés.

ICS Actionbar

Sur les versions inférieures d'Android, cependant, cette apparence étrange se produit lorsque vous utilisez Theme.AppCompat.Light.

Standard AppCompat Actionbar

La barre d'actions est blanche et comporte une ligne bleue en dessous.

J'ai pu résoudre ce problème en utilisant le Générateur de styles de la barre d'action Android d'Android Asset Studio pour générer un thème personnalisé avec une barre d'action solide au lieu d'un transparent.

AppCompat with custom drawables from Style Generator

Quand on le compare à la barre d’action que j’ai obtenue en utilisant ActionbarSherlock, c’est quand même un peu moche.

ActionbarSherlock

La barre d'action AppCompat comporte une ligne noire très nette entre elle-même et le contenu de l'activité, tandis que la barre d'action stock de ICS ou celle de ActionbarSherlock ont ​​une transition plus douce de la barre d'action à la présentation.

Comment puis-je donner à l'Actionbar une apparence qui ressemble vraiment à celle d'Android 4+?

12
Bertram Sherwood

Vous devez créer votre propre style avec l'image que vous souhaitez mettre en arrière-plan. Dans votre style.xml, vous devriez créer quelque chose de similaire à ceci:

values ​​/ styles.xml

    <style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="actionBarStyle">@style/ActionBarTabStyle.MyAppTheme</item>
    </style>

    <style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="background">@drawable/your_background_image</item>
    </style>

values-v14/styles.xml

    <style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat.Light">
        <item name="Android:actionBarStyle">@style/ActionBarTabStyle.MyAppTheme</item>
    </style>

    <style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
        <item name="Android:background">@drawable/your_background_image</item>
    </style>

et vous pouvez utiliser cette image de 9 patchs:

9-patch image

17
hardartcore

J'utilise ce code:

<resources>

<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="actionBarStyle">@style/ActionBarTheme</item>
</style>

<style name="ActionBarTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    <item name="background">@color/red_action_bar</item>
</style>

</resources>

J'espère que ce code est d'une grande aide.

3
Cabezas

Vous devez remplacer le thème de la barre d'action

1
ishan jain

Pour afficher l'icône et la couleur personnalisées dans AppCompatActivity nous pouvons coller ce code:

values ​​/ styles.xml

<resources>

 <style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat">
    <item name="actionBarStyle">@style/ActionBar.Solid.MyAppTheme</item>
    <item name="icon">@drawable/ic_launcher</item>
</style>

<style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    <item name="background">@color/white</item>
</style>

values-v14/styles.xml

<resources>

<style name="Theme.MyAppTheme" parent="@style/Theme.AppCompat.Light">
    <item name="Android:actionBarStyle">@style/ActionBar.Solid.MyAppTheme</item>
       <item name="icon">@drawable/ic_launcher</item>
</style>

<style name="ActionBar.Solid.MyAppTheme" parent="@style/Widget.AppCompat.Light.ActionBar.Solid">
    <item name="Android:background">@color/app_titile_bar_color</item>
</style>

Vous pouvez également utiliser votre image d’arrière-plan personnalisée à partir de @ drawable/your_pic.png 

Pour afficher l'icône et le texte de l'application, vous les collez également à votre activité.

        // set action Bar icon & Text
    ActionBar mActionBar = getSupportActionBar();
    mActionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE
            | ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME);
0
Shihab Uddin