Je teste le nouveau thème Barre d'outils et AppCompat sur Android et j'ai rencontré un problème. Le texte du titre de ma barre d'outils semble de taille normale en mode portrait, mais il est devenu plutôt petit en mode paysage, même si je ne l'ai pas fait '' Ne faites rien dans le code pour modifier la taille du texte du titre. Voici les captures d'écran:
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>
J'ai essayé de définir Android:titleTextAppearance
de la barre d'outils mais le style n'était pas appliqué. Ensuite, j'ai réalisé que j'utilisais le thème AppCompat, j'ai donc utilisé app:titleTextAppearance
et le style est maintenant appliqué. Il semble que les minuscules en paysage soient un problème dans le AppCompat.Toolbar.Title
le style lui-même, je l'ai donc remplacé pour définir manuellement la taille de la police. Le code final:
XML de la barre d'outils:
<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" />
Style de barre d'outils:
<style name="ToolbarTitle" parent="@style/TextAppearance.Widget.AppCompat.Toolbar.Title">
<item name="Android:textSize">20sp</item>
</style>
AOSP Issue # 170707 a été écrit concernant la modification de la taille du texte pour le titre et le sous-titre. La réponse du membre du projet était "Fonctionne comme prévu. Identique au comportement du framework." Bien que je ne trouve pas que la modification de la taille du texte soit le comportement par défaut souhaitable, il semble que les ingénieurs d'AppCompat devaient maintenir la cohérence avec le comportement du framework (défectueux). Les développeurs sont ensuite laissés à remplacer les styles par défaut comme décrit dans la réponse de Chilly Chan.
Ajouts à la réponse de Chilly Chan:
1) La taille du texte des sous-titres peut être contrôlée de manière similaire en définissant un autre style dérivé de TextAppearance.Widget.AppCompat.Toolbar.Subtitle.
2) Les valeurs par défaut pour la taille du titre/sous-titre en orientation portrait sont 20dp/16dp (sur mon Galaxy S3, 4.4.2.). L'exemple de Chilly Chan spécifie "17sp". Utilisez "sp" uniquement si vous souhaitez laisser le réglage des préférences utilisateur affecter la taille du titre/sous-titre.
Je cherchais une solution sans barre d'outils personnalisée, mais avec style personnalisé et ce code a fait l'affaire pour moi:
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"/>
Où MainActivity étend AppCompatActivity; testé sur API 19, 22 et 23.
Essayez d'ajouter cela à votre section de barre d'outils sous le fichier activity_main.xml.
Android: minHeight = "? Android: attr/actionBarSize"
J'ai également remarqué que vous utilisez une barre d'action sombre standard, suggérez d'utiliser le thème sans barre d'action, défini une nouvelle barre d'outils où
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” />