2014-10-26 2 views
13

Я добавил Toolbar к моему проекту Lollipop. Тем не менее, у меня проблемы с дизайном Toolbar. Мой заголовок в Toolbar, кажется, имеет жирный шрифт, но я хочу, чтобы он был курсивом. Есть идеи, как это сделать? Я пробовал играть с actionbar-style, не повезло.Android Toolbar style

Я установил стиль на Toolbar с app:theme="@style/toolbar" и мой @style/toolbar (родитель ThemeOverlay.AppCompat.ActionBar), где я играю без каких-либо хороших результатов.

ответ

5

Вы можете добавить TextView внутри панели инструментов, например:

<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

Прохладный. Должно быть возможным стилизовать это, не добавляя пользовательский вид, не так ли? – Kenneth

+2

Вы используете Android Studio? Не получать предупреждения? «Элемент TextView здесь запрещен» –

+0

@JaredBurrows Я использую ADT, и я не получил этого предупреждения. –

-4

Вы можете применить тему на панель инструментов следующим образом:

<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" /> 

Просто измените стиль в вашем styles.xml, изменяя атрибут TextAppearance, и вам должно быть хорошо идти.

+2

Я пробовал создать свой собственный стиль, как я сказал в вопросе, но не повезло. Можете ли вы показать мне пример стиля, который должен работать? – Kenneth

5

Заголовок ToolBar является настраиваемым. Любая настройка, которую вы делаете, должна быть сделана в теме. Я приведу вам пример.

Панель макета:

<?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" /> 

Стили:

<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

Также не работает на L – jasonhudgins

+0

Ваша панель инструментов там. Это в его собственном файле, называемом toolbar.xml, хранящемся в папке значений ... или что? Можете ли вы указать, куда идет этот код? – Faulty

1

Проблема уже упоминалось выше происходит только в версиях Lollipop, а не в KitKat и более низких версий. Lollipop не соответствует стилю текста и ставит его собственный TitleTextAppearance. Таким образом, даже вы добавите своего собственного ребенка TextView для своего Toolbar (показано ниже), android.support.v7.widget.Toolbar все равно переопределит ваши стили.

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

Чтобы окончательно решить эту проблему, поставить свой собственный TextView для заголовка и переопределить setTitle методы Toolbar, чтобы пропустить Lollipop Предопределенных TitleTextAppearance.

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

Как вы затем сопоставляете класс java с вашим XML-макетом, пожалуйста? Раздуваете ли вы настраиваемый макет во всех конструкторах? Кроме того, вы завершаете макет в ''? И мой последний вопрос, вы используете его, помещая ' 'в макет вашей деятельности или вы используете' '? –

+0

Этот стиль и тематический материал - это такие джунгли ... – axd

10

Это действительно очень просто. Существует метод на панели инструментов, называемый setTitleTextAppearance(), который, как кажется, игнорируется. Просто определите свой собственный textAppearance в styles.xml, такие как:

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

, а затем в вашем коде, вы просто звоните:

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

и вуаля!

+1

Это не работает для 'textStyle' (полужирный, курсив), указанный в вопросе. – TalkLittle