Today's #AndroidDev #Protip on text appearance and theme attributes is by +Katherine Kuan, the newest member of Android Developer Relations (welcome, Katherine!)When choosing font sizes for your app, using too many different sizes can be visually distracting and confuse the user as to what information is important. To be consistent with other apps on the platform, you can use the standard set of type sizes provided by the framework: small, medium, or large.
To use a standard text size (and color), instead of setting the TextView's
android:textSize directly, set the
android:textAppearance to a predefined theme attribute [1] such as
android:textAppearanceLarge:
<TextView …
android:textAppearance="?android:textAppearanceLarge" />As of API 19 (KitKat):
•
?android:textAppearanceSmall is currently 14sp
•
?android:textAppearanceMedium is currently 18sp
•
?android:textAppearanceLarge is currently 22sp
These default sizes and concepts are also documented in the "Typographic scale" section of the Android Design guide [2].
Note that setting the text appearance will also affect the default values for text color attributes such as
android:textColor and
android:textColorHint. You can always override the default values by providing those attributes directly on the TextView element:
<TextView ...
android:textAppearance="?android:textAppearanceLarge" android:textColor="@color/my_own_color" android:textColorLink="@color/my_own_link_color"/>Also note that you don't necessarily have to use the system default appearances. You can create your own set of type sizes and colors that fits your desired visual design. For information on creating your own theme attributes, see the
#Protip we posted on the topic back in October [3].
Lastly, if you want to check out the definition of these standard text appearances in the framework code, look for "textAppearanceLarge" in the
Theme.Holo (or
Theme.Holo.Light) definition in
themes.xml [4]. The attribute values will be style resources (such as
TextAppearance.Holo.Large), for which you can find definitions in
styles.xml [5]. In the example above, note that
TextAppearance.Holo.Large inherits from
TextAppearance.Large, which in turn inherits from the standard
TextAppearance style.
[1]
http://developer.android.com/reference/android/R.attr.html[2]
http://developer.android.com/design/style/typography.html [3]
https://plus.google.com/+AndroidDevelopers/posts/3rL9cTLyuQy[4]
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/themes.xml[5]
https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/res/res/values/styles.xml