2015-01-20 5 views
56

Ich teste die neue Toolbar und AppCompat Thema auf Android und stieß auf ein Problem. Mein Symbolleistentitel erscheint im Hochformat normal groß, wurde aber im Querformat ziemlich klein, obwohl ich im Code nichts getan habe, um die Textgröße des Titels zu ändern. Hier sind die Screenshots:Android Toolbar: kleiner Titel Text im Querformat

Portrait Landscape

activity_main.xml:

<!-- A DrawerLayout is intended to be used as the top-level content view using match_parent for both width and height to consume the full space available. --> 
<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    tools:context="com.techfunmyanmar.jujaka.ui.MainActivity"> 

    <android.support.v7.widget.Toolbar 
     android:id="@+id/main_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:background="?attr/colorPrimary" 
     app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

    <android.support.v4.widget.DrawerLayout 
     android:id="@+id/drawer_layout" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <!-- As the main content view, the view below consumes the entire 
      space available using match_parent in both dimensions. --> 
     <FrameLayout 
      android:id="@+id/container" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" /> 

     <!-- android:layout_gravity="start" tells DrawerLayout to treat 
      this as a sliding drawer on the left side for left-to-right 
      languages and on the right side for right-to-left languages. 
      If you're not building against API 17 or higher, use 
      android:layout_gravity="left" instead. --> 
     <!-- The drawer is given a fixed width in dp and extends the full height of 
      the container. --> 
     <fragment 
      android:id="@+id/navigation_drawer" 
      android:name="com.techfunmyanmar.jujaka.ui.NavigationDrawerFragment" 
      android:layout_width="@dimen/navigation_drawer_width" 
      android:layout_height="match_parent" 
      android:layout_gravity="start" 
      tools:layout="@layout/fragment_navigation_drawer" /> 
    </android.support.v4.widget.DrawerLayout> 
</LinearLayout> 

styles.xml:

<resources> 
    <!-- Base application theme. --> 
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
     <item name="windowActionBar">false</item> 

     <!-- Customize your theme here. --> 
     <item name="colorPrimary">@color/primary</item> 
     <item name="colorPrimaryDark">@color/primary_dark</item> 
     <item name="colorAccent">@color/accent</item> 

    </style> 

    <!-- Main application theme. --> 
    <style name="AppTheme" parent="AppBaseTheme"> 

    </style> 

    <style name="DrawerArrowStyle" parent="Widget.AppCompat.DrawerArrowToggle"> 
     <item name="spinBars">true</item> 
    </style> 
</resources> 
+0

Statt die Textgröße größer zu machen, sollten Sie überlegen, die Höhe der Symbolleiste kleiner zu machen? Genau das hat Google in seiner Google Mail-App getan. Ich poste eine ähnliche Frage unter http://stackoverflow.com/questions/30897348/what-is-the-recommended-material-design-toolbar-height-in-landscape –

Antwort

98

Ich habe versucht, android:titleTextAppearance der Symbolleiste festlegen, aber der Stil wurde nicht angewendet. Dann wurde mir klar, dass ich das AppCompat-Design verwende, also habe ich app:titleTextAppearance verwendet und der Stil wird nun angewendet. Es sieht aus wie die kleinen Buchstaben in der Landschaft sind ein Problem in der integrierten AppCompat.Toolbar.Title Stil selbst, so dass ich es überschreiben, um die Schriftgröße manuell einzustellen. Der endgültige Code:

Toolbar XML:

<android.support.v7.widget.Toolbar 
     android:id="@+id/main_toolbar" 
     android:layout_width="match_parent" 
     android:layout_height="?attr/actionBarSize" 
     android:background="?attr/colorPrimary" 
     app:titleTextAppearance="@style/ToolbarTitle" 
     android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
     app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

Toolbar Stil:

<style name="ToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title"> 
     <item name="android:textSize">20sp</item> 
</style> 
+4

sehr gute Lösung! Die textSize sollte 20sp, als Hochformat Textgröße – Phuong

+1

Wie kann ich dies auf Standar Support Actionbar anwenden? (Keine Symbolleiste) – ThanosFisherman

+0

@ThanosF Kann ich Ihren Code sehen? –

2

Versuchen Sie, diese unter dem activity_main Ihrer Symbolleiste Abschnitt hinzufügen .xml.

android: minHeight = "android: attr/actionBarSize"

Ich habe auch bemerkt, dass Sie Standard dunkel Aktionsleiste verwenden, empfehlen Theme ohne Aktionsleiste zu verwenden, definiert eine neue Symbolleiste, wo

Toolbar toolbar = (Toolbar) findViewById(R.id.my_awesome_toolbar); 
    setSupportActionBar(toolbar); 

<android.support.v7.widget.Toolbar 
    android:id=”@+id/my_awesome_toolbar” 
    android:layout_height=”wrap_content” 
    android:layout_width=”match_parent” 
    android:minHeight=”?attr/actionBarSize” 
    android:background=”?attr/colorPrimary” /> 
+0

Danke, aber es ist immer noch klein. –

+0

Verwenden Sie nicht dunkle Aktionsleiste Thema? läuft auf Emulator oder Telefon? – TSG

+0

Danke nochmal. Ich habe "Theme.AppCompat.Light.NoActionBar" mit dem von Ihnen geposteten Toolbar-XML versucht und der Titel ist immer noch klein. Der einzige Unterschied besteht darin, dass das Überlaufsymbol und der Titel schwarz wurden. Am Telefon laufen. Getestet auf ICS, KK und L. Der Text ist auf allen drei Telefonen im Querformat klein. –

-4

Ich denke, es hat mit einigen Änderungen am Layout vorgenommen zu tun, wenn Sie das Gerät drehen, ast es aussieht wie du kann die Größe ändern verhindern, indem sie für th so etwas wie

android:configChanges="orientation|screenSize" 

im AndroidManifest.xml Hinzufügen e Tätigkeit sind Sie in Wie immer Android. configChanges mehr Auswirkungen hat, so sollte nur verwendet werden, wenn Sie es wirklich brauchen :)

+0

Hallo alle. Ich weiß nicht, warum dieser Kommentar abgelehnt wurde. Ich habe 'configChanges' versucht und es funktioniert ohne weitere Änderungen in XML. Danke Mann. @FrancescoMapelli –

+0

danke. Ich würde gerne den Grund dafür auch wissen ...Vielleicht vermisse ich etwas ernsthaftes, warum das nicht in Ordnung ist. Ich weiß, dass meine Lösung mehr eine Abhilfe ist als eine saubere Lösung ist, aber zumindest funktioniert es und gibt Hinweis auf die Ursachen –

+0

Diese Antwort falsch ist, weil die Textgröße in Abhängigkeit von der Ausrichtung des Geräts auf Ansicht Inflation Zeit unterscheiden sich (in der Regel App-Start). Wenn Sie die App also im Hochformat starten, hat Ihre Toolbar eine größere Textgröße, die durch Rotationen besteht. Wenn Sie die App jedoch im Querformat starten, wird Ihre Symbolleiste eine kleinere Textgröße haben, die wiederum durch Rotationen besteht. – TalkLittle

10

AOSP Issue #170707 in Bezug auf die Änderung für Titel und Untertitel in Schriftgröße geschrieben wurde. Die Antwort des Projektmitglieds lautete "Funktioniert wie vorgesehen. Identisch mit Framework-Verhalten." Obwohl ich nicht finde, dass die Textgröße das wünschenswerte Standardverhalten ist, klingt es, als müssten die AppCompat-Ingenieure die Konsistenz mit dem (fehlerhaften) Framework-Verhalten beibehalten. Entwickler können dann die Standardstile überschreiben, wie in der Antwort von Chilly Chan beschrieben.

Zugänge zu Chilly Chan Antwort:

1) Die Untertitel Textgröße kann von TextAppearance.Widget.AppCompat.Toolbar.Subtitle abgeleitet durch die Definition eines anderen Stils in ähnlicher Weise gesteuert werden.

2) Die Standardwerte für Titel/Untertitel im Hochformat sind 20dp/16dp (auf meinem Galaxy S3, 4.4.2.). Chilly Chans Beispiel spezifiziert "17sp". Verwenden Sie "sp" nur, wenn Sie möchten, dass die Benutzereinstellungen die Titel-/Untertitelgröße beeinflussen.

+2

Verwenden Sie nicht dp auf Textgrößen. –

+1

@qbix Danke für das Aufzeigen von dp. dp ist das Richtige für eine Toolbar mit einem Untertitel, die die Standardwerte von Google imitiert. Wenn Sie in der Symbolleiste sp verwenden, wird die untere Hälfte des Untertiteltexts abgeschnitten, wenn Benutzer die Eingabehilfe für großen Text aktiviert haben. Die Alternative besteht darin, dass die Toolbar bis zu einer unerwarteten Höhe gedehnt wird, um in den Text zu passen, und selbst dann wird die Untertitel-Textauffüllung falsch (bündig mit dem unteren Rand von Toolbar w/0 bottom padding) oder zumindest mühsam zu verwalten. – TalkLittle

4

Ich war auf der Suche nach einer Lösung ohne individuelle Toolbar, aber mit benutzerdefinierten Stil und dieser Code hat den Trick für mich:

styles.xml

<style name="MyTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="colorAccent">@color/colorAccent</item> 
    <item name="actionBarStyle">@style/MyActionBar</item> 
</style> 

<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid"> 
    <item name="titleTextStyle">@style/MyTitleTextStyle</item> 
</style> 

<style name="MyTitleTextStyle" parent="@style/TextAppearance.AppCompat.Title"> 
    <item name="android:textSize">20sp</item> <!-- Default for portrait is 20sp and for landscape 14sp--> 
</style> 

AndroidManifest. xml

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/MyTheme"/> 

Wo die MainActivity AppCompatActivity erweitert; getestet auf API 19, 22 und 23.

+0

danke ein Haufen! –

+0

Das ist die beste Antwort! –