2014-10-26 6 views
13

Ich habe ein Toolbar zu meinem Lollipop-Projekt hinzugefügt. Ich habe jedoch Probleme mit dem Styling der Toolbar. Mein Titel in der Toolbar scheint eine Fettschrift zu haben, aber ich würde es gerne kursiv schreiben. Irgendeine Idee, wie man das erreicht? Ich habe versucht, mit der actionbar-style herumspielen, kein Glück.Android Toolbar Stil

Ich habe einen Stil auf dem Toolbar mit app:theme="@style/toolbar" gesetzt und meine @style/toolbar (parent ThemeOverlay.AppCompat.ActionBar) ist, wo ich spiele um ohne gute Ergebnisse.

Antwort

5

Sie können TextView innerhalb Toolbar hinzufügen, zum Beispiel:

<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> 
+4

Kühl. Sollte es möglich sein, dies zu stylen, ohne eine benutzerdefinierte Ansicht hinzufügen zu müssen, meinst du nicht? – Kenneth

+2

Verwenden Sie Android Studio? Keine Warnungen erhalten? "Element TextView ist hier nicht erlaubt" –

+0

@JaredBurrows Ich benutze ADT, und ich habe diese Warnung nicht bekommen .. –

-4

Sie ein Thema in die Symbolleiste anwenden können wie folgt:

<android.support.v7.widget.Toolbar 
    android:layout_height="wrap_content" 
    android:layout_width="match_parent" 
    android:minHeight="56dp" 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

einfach den Stil in Ihrem styles.xml ändern, ändert das Attribut TextAppearance, und Sie sollten gut gehen.

+2

Ich habe versucht, meinen benutzerdefinierten Stil zu erstellen, wie ich in der Frage sagte, aber kein Glück. Kannst du mir einen Beispielstil zeigen, der funktionieren sollte? – Kenneth

5

Der Titel der ToolBar ist änderbar. Alle Anpassungen, die Sie vornehmen, müssen im Design vorgenommen werden. Ich gebe dir ein Beispiel.

Toolbar Layout:

<?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> 
+1

Funktioniert auch nicht auf L – jasonhudgins

+0

Ihr Toolbar-Layout dort. Ist das in seiner eigenen Datei namens toolbar.xml im Werte-Ordner gespeichert ... oder was? Können Sie angeben, wohin dieser Code geht? – Faulty

1

Das Problem oben nur erwähnt tritt in Lollipop-Versionen und nicht in Kitkat und niedrigeren Versionen. Lollipop folgt nicht dem Textstil und setzt seinen eigenen TitleTextAppearance. So fügen Sie sogar Ihr eigenes TextView Kind für Ihre Toolbar hinzu (unten gezeigt), die android.support.v7.widget.Toolbar überschreibt noch Ihre Arten.

<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" 
     style="@style/someTitleStyle" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

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

Um dies endlich zu lösen, Ihre eigene TextView für den Titel setzen und die setTitle Methoden der Toolbar überschreiben die Lollipop vordefinierten TitleTextAppearance zu überspringen.

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); 
    } 
} 
+0

Wie ordnen Sie dann bitte die Java-Klasse Ihrem XML-Layout zu? Bügst du das benutzerdefinierte Layout in allen Konstruktoren auf? Wickeln Sie das Layout auch in ''? Und meine letzte Frage, verwenden Sie es dann, indem Sie ' 'zum Layout Ihrer Aktivität, oder verwenden Sie' '? –

+0

dieser Stil und Thema Zeug ist so ein Dschungel ... – axd

10

Das ist eigentlich wirklich einfach. Auf der Symbolleiste gibt es eine Methode namens setTitleTextAppearance(), die anscheinend alle ignorieren. Definieren Sie einfach Ihre individuelle textAppearance in styles.xml, wie zum Beispiel:

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

und dann im Code, die Sie gerade anrufen:

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

und voila!

+1

Dies funktioniert nicht für "TextStyle" (fett, kursiv) in der Frage angegeben. – TalkLittle