Refine resolution order for typeface and fontFamily

Previously any fontFamily value on a TextView would override a typeface
value, even if the fontFamily is from a TextAppearance (for example,
from the theme) and the typeface is explicitly set. This patch changes
the resolution order to fontFamily set directly on the TextView,
typeface set directly on the TextView, fontFamily from TextAppearance,
typeface from TextAppearance.

Bug: 16154223
Change-Id: I45c1e511fba8f64eb236200e3fa2e885c02b59dc
This commit is contained in:
Raph Levien
2015-01-29 12:49:19 -08:00
parent 1a5ac5b415
commit 42b3024efd

View File

@@ -658,6 +658,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
ColorStateList textColorLink = null;
int textSize = 15;
String fontFamily = null;
boolean fontFamilyExplicit = false;
int typefaceIndex = -1;
int styleIndex = -1;
boolean allCaps = false;
@@ -1012,6 +1013,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
case com.android.internal.R.styleable.TextView_fontFamily:
fontFamily = a.getString(attr);
fontFamilyExplicit = true;
break;
case com.android.internal.R.styleable.TextView_password:
@@ -1300,6 +1302,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
typefaceIndex = MONOSPACE;
}
if (typefaceIndex != -1 && !fontFamilyExplicit) {
fontFamily = null;
}
setTypefaceFromAttrs(fontFamily, typefaceIndex, styleIndex);
if (shadowcolor != 0) {