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.
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>
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é!
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>
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);
}
}