web-dev-qa-db-fra.com

Android Style de barre d'outils

J'ai ajouté un Toolbar à mon projet Lollipop. Cependant, j'ai du mal à styliser le Toolbar. Mon titre dans le Toolbar semble avoir une police en gras, mais je voudrais qu'il soit en italique. Une idée de comment y parvenir? J'ai essayé de jouer avec le actionbar-style, pas de chance.

J'ai défini un style sur le Toolbar avec app:theme="@style/toolbar" et mon @style/toolbar (parent ThemeOverlay.AppCompat.ActionBar) est l'endroit où je joue sans bons résultats.

14
Kenneth

Vous pouvez ajouter TextView dans la barre d'outils, par exemple:

<Android.support.v7.widget.Toolbar xmlns:Android="http://schemas.Android.com/apk/re/Android"
    xmlns:app="http://schemas.Android.com/apk/res-auto"
    Android:id="@+id/toolbar"
    Android:layout_height="wrap_content"
    Android:layout_width="match_parent"
    Android:minHeight="?attr/actionBarSize"
    Android:background="?attr/colorPrimary" >

    <TextView
        Android:id="@+id/title"
        Android:layout_width="match_parent"
        Android:layout_height="wrap_content"
        Android:textStyle="italic" />

</Android.support.v7.widget.Toolbar>
6
Dark Leonhart

C'est vraiment très simple. Il y a une méthode sur la barre d'outils appelée setTitleTextAppearance () que tout le monde semble ignorer. Définissez simplement votre apparence de texte personnalisée dans styles.xml, par exemple:

    <style name="MyTitleTextApperance" parent="@Android:style/TextAppearance.Medium">
    <item name="Android:textColor">@Android:color/white</item>
    <item name="Android:textSize">20sp</item>
</style>

puis dans votre code, vous appelez simplement:

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    toolbar.setTitleTextAppearance(this, R.style.MyTitleTextApperance);

et le tour est joué!

10
jasonhudgins

Le titre de la barre d'outils est stylable. Toute personnalisation que vous faites doit être effectuée dans le thème. Je vais vous donner un exemple.

Disposition de la barre d'outils:

<?xml version="1.0" encoding="utf-8"?>
<Android.support.v7.widget.Toolbar
    style="@style/ToolBarStyle.Event"
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/toolbar"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:background="?attr/colorPrimary"
    Android:minHeight="@dimen/abc_action_bar_default_height_material" />

Styles:

<style name="ToolBarStyle" parent="ToolBarStyle.Base"/>

<style name="ToolBarStyle.Base" parent="">
    <item name="popupTheme">@style/ThemeOverlay.AppCompat.Light</item>
    <item name="theme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
</style>

<style name="ToolBarStyle.Event" parent="ToolBarStyle">
    <item name="titleTextAppearance">@style/TextAppearance.Widget.Event.Toolbar.Title</item>
</style>

<style name="TextAppearance.Widget.Event.Toolbar.Title" parent="TextAppearance.Widget.AppCompat.Toolbar.Title">
    <!--Any text styling can be done here-->
    <item name="Android:textStyle">normal</item>
    <item name="Android:textSize">@dimen/event_title_text_size</item>
</style>
6
Binoy Babu

Le problème mentionné ci-dessus se produit uniquement dans les versions Lollipop et non dans KitKat et les versions inférieures. Lollipop ne suit pas le style de texte et met son propre TitleTextAppearance. Ainsi, même si vous ajoutez votre propre enfant TextView pour votre Toolbar (illustré ci-dessous), le Android.support.v7.widget.Toolbar remplacera toujours vos styles.

<Android.support.v7.widget.Toolbar
    Android:id="@+id/toolbar"
    Android:theme="@style/someToolbarStyle"
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content">

    <TextView
        Android:id="@+id/title"
        Android:textAppearance="@style/TextAppearance.AppCompat.Title"
        Android:layout_width="wrap_content"
        Android:layout_height="wrap_content" />

</Android.support.v7.widget.Toolbar>

Pour finalement résoudre ce problème, mettez votre propre TextView pour le titre et remplacez les méthodes setTitle des Toolbar pour ignorer le TitleTextAppearance prédéfini du Lollipop.

public class YourCustomToolbar extends Toolbar {

    public YourCustomToolbar (Context context) {
        super(context);
    }

    public YourCustomToolbar (Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public YourCustomToolbar (Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
     }

    @Override
    public void setTitle(CharSequence title) {
        ((TextView) findViewById(R.id.title)).setText(title);
    }

    @Override
    public void setTitle(int title) {
        ((TextView) findViewById(R.id.title)).setText(title);
    }
}
2
Dynameyes