2015-01-20 12 views
56

Sto testando la nuova barra degli strumenti e il tema AppCompat su Android e ho riscontrato un problema. Il testo del titolo della mia barra degli strumenti sembra di dimensioni normali in modalità verticale, ma è diventato piuttosto piccolo in modalità orizzontale anche se non ho fatto nulla nel codice per modificare la dimensione del testo del titolo. Qui ci sono i colpi di schermo:Barra degli strumenti Android: testo del titolo piccolo in modalità orizzontale

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

Invece di aumentare le dimensioni del testo, si dovrebbe considerare di ridurre l'altezza della barra degli strumenti? Come, questo è ciò che Google ha fatto nella loro app GMail. Inserisco una domanda simile a http://stackoverflow.com/questions/30897348/questo-è-il-recommended-material-design-toolbar-height-in-landscape –

risposta

98

Ho provato a impostare android:titleTextAppearance della barra degli strumenti ma lo stile non è stato applicato. Poi mi sono reso conto che sto usando il tema AppCompat, quindi ho usato app:titleTextAppearance e lo stile è ora applicato. Sembra che le lettere minuscole in orizzontale siano un problema nello stile integrato AppCompat.Toolbar.Title, quindi l'ho annullato per impostare manualmente la dimensione del carattere. Il codice finale:

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

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

ottima soluzione! TextSize deve essere di 20sp, come dimensione del testo in modalità verticale – Phuong

+1

Come posso applicarlo alla barra di azione di supporto standar? (Nessuna barra degli strumenti) – ThanosFisherman

+0

@ThanosF Posso vedere il tuo codice? –

2

provare ad aggiungere questo alla vostra sezione della barra degli strumenti sotto l'activity_main .xml.

android: MinHeight = "android:? Attr/actionBarSize"

Ho anche notato che si sta utilizzando standard di barra di azione buio, consiglia di utilizzare a tema senza barra delle azioni, definito una nuova barra degli strumenti in cui

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

Grazie, ma è ancora piccolo. –

+0

Utilizzo della barra delle azioni non scura Tema? in esecuzione su emulatore o telefono? – TSG

+0

Grazie ancora. Ho provato "Theme.AppCompat.Light.NoActionBar" con la barra degli strumenti xml che hai postato e il titolo è ancora piccolo. L'unica differenza è che l'icona e il titolo dell'overflow diventano neri. Funzionando sul telefono Testato su ICS, KK e L. Il testo è piccolo su tutti e tre i telefoni in modalità orizzontale. –

-4

Io penso che abbia a che fare con alcune modifiche di layout eseguite quando si ruota il dispositivo, ast sembra che si può impedire il ridimensionamento aggiungendo qualcosa come

android:configChanges="orientation|screenSize" 

in AndroidManifest.xml per th Come sempre, android: configChanges ha più implicazioni quindi dovrebbe essere usato solo se ne hai davvero bisogno :)

+0

Hi tutti. Non so perché questo commento abbia votato. Ho provato 'configChanges' e funziona senza altre modifiche in xml. Grazie amico. @FrancescoMapelli –

+0

grazie. Mi piacerebbe conoscere anche la ragione del downvote ...forse mi manca qualcosa di serio sul perché questo non è ok. So che la mia soluzione è più una soluzione alternativa a una soluzione pulita, ma almeno funziona e dà un suggerimento sulle cause –

+0

Questa risposta è errata perché la dimensione del testo varia a seconda dell'orientamento del dispositivo in Visualizza tempo di gonfiaggio (di solito avvio dell'app). Quindi, se apri l'app in verticale, la tua barra degli strumenti avrà una dimensione del testo più ampia che persiste attraverso le rotazioni. Ma se apri l'app in orizzontale, la tua barra degli strumenti avrà una dimensione del testo più piccola, di nuovo persistente attraverso le rotazioni. – TalkLittle

10

AOSP Issue #170707 è stato scritto per quanto riguarda la modifica delle dimensioni del testo per titolo e sottotitolo. La risposta del membro del progetto è stata "Funziona come previsto. Identico al comportamento del framework". Anche se non trovo che cambiare la dimensione del testo sia il comportamento predefinito desiderabile, sembra che i tecnici di AppCompat abbiano dovuto mantenere la coerenza con il comportamento del framework (imperfetto). Gli sviluppatori sono quindi lasciati a scavalcare gli stili predefiniti come descritto nella risposta di Chilly Chan.

Aggiunte alla risposta di Chilly Chan:

1) La dimensione del testo dei sottotitoli può essere controllato in modo simile mediante la definizione di un altro stile derivato da TextAppearance.Widget.AppCompat.Toolbar.Subtitle.

2) I valori predefiniti per titolo/dimensione dei sottotitoli in orientamento verticale sono 20dp/16dp (sul mio Galaxy S3, 4.4.2.). L'esempio di Chilly Chan specifica "17sp". Usa "sp" solo se vuoi lasciare che l'impostazione delle preferenze utente abbia effetto sulla dimensione del titolo/sottotitolo.

+2

Non utilizzare dp sulle dimensioni del testo. –

+1

@qbix Grazie per aver segnalato dp. dp è la cosa giusta da fare per una barra degli strumenti con un sottotitolo, che imita i valori predefiniti di Google. L'utilizzo di sp nella barra degli strumenti consente di ritagliare la metà inferiore del testo dei sottotitoli quando gli utenti hanno attivato l'impostazione Accessibilità testo grande. L'alternativa è consentire alla barra degli strumenti di allungare a un'altezza imprevista per adattarsi al testo, e anche in questo caso, il riempimento del testo dei sottotitoli diventa errato (a filo con la barra degli strumenti con il riempimento inferiore) o almeno un dolore da gestire. – TalkLittle

4

ero alla ricerca di una soluzione senza barra degli strumenti personalizzato, ma con personalizzato stile e questo codice ha fatto il trucco per me:

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

Dove MainActivity estende AppCompatActivity; testato su API 19, 22 e 23.

+0

grazie mille! –

+0

Questa è la migliore risposta! –

Problemi correlati