Merge "AutoSize TextView - correct pixel transformations" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
98891dbb70
@@ -746,17 +746,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
// Default value for the step size in pixels.
|
// Default value for the step size in pixels.
|
||||||
private static final int DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX = 1;
|
private static final int DEFAULT_AUTO_SIZE_GRANULARITY_IN_PX = 1;
|
||||||
// Use this to specify that any of the auto-size configuration int values have not been set.
|
// Use this to specify that any of the auto-size configuration int values have not been set.
|
||||||
private static final int UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE = -1;
|
private static final float UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE = -1f;
|
||||||
// Auto-size text type.
|
// Auto-size text type.
|
||||||
private int mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_NONE;
|
private int mAutoSizeTextType = AUTO_SIZE_TEXT_TYPE_NONE;
|
||||||
// Specify if auto-size text is needed.
|
// Specify if auto-size text is needed.
|
||||||
private boolean mNeedsAutoSizeText = false;
|
private boolean mNeedsAutoSizeText = false;
|
||||||
// Step size for auto-sizing in pixels.
|
// Step size for auto-sizing in pixels.
|
||||||
private int mAutoSizeStepGranularityInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
private float mAutoSizeStepGranularityInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
||||||
// Minimum text size for auto-sizing in pixels.
|
// Minimum text size for auto-sizing in pixels.
|
||||||
private int mAutoSizeMinTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
private float mAutoSizeMinTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
||||||
// Maximum text size for auto-sizing in pixels.
|
// Maximum text size for auto-sizing in pixels.
|
||||||
private int mAutoSizeMaxTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
private float mAutoSizeMaxTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
||||||
// Contains a (specified or computed) distinct sorted set of text sizes in pixels to pick from
|
// Contains a (specified or computed) distinct sorted set of text sizes in pixels to pick from
|
||||||
// when auto-sizing text.
|
// when auto-sizing text.
|
||||||
private int[] mAutoSizeTextSizesInPx = EmptyArray.INT;
|
private int[] mAutoSizeTextSizesInPx = EmptyArray.INT;
|
||||||
@@ -987,9 +987,9 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
CharSequence text = "";
|
CharSequence text = "";
|
||||||
CharSequence hint = null;
|
CharSequence hint = null;
|
||||||
boolean password = false;
|
boolean password = false;
|
||||||
int autoSizeMinTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
float autoSizeMinTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
||||||
int autoSizeMaxTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
float autoSizeMaxTextSizeInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
||||||
int autoSizeStepGranularityInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
float autoSizeStepGranularityInPx = UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE;
|
||||||
int inputType = EditorInfo.TYPE_NULL;
|
int inputType = EditorInfo.TYPE_NULL;
|
||||||
a = theme.obtainStyledAttributes(
|
a = theme.obtainStyledAttributes(
|
||||||
attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
|
attrs, com.android.internal.R.styleable.TextView, defStyleAttr, defStyleRes);
|
||||||
@@ -1363,17 +1363,17 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case com.android.internal.R.styleable.TextView_autoSizeStepGranularity:
|
case com.android.internal.R.styleable.TextView_autoSizeStepGranularity:
|
||||||
autoSizeStepGranularityInPx = a.getDimensionPixelSize(attr,
|
autoSizeStepGranularityInPx = a.getDimension(attr,
|
||||||
UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE);
|
UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case com.android.internal.R.styleable.TextView_autoSizeMinTextSize:
|
case com.android.internal.R.styleable.TextView_autoSizeMinTextSize:
|
||||||
autoSizeMinTextSizeInPx = a.getDimensionPixelSize(attr,
|
autoSizeMinTextSizeInPx = a.getDimension(attr,
|
||||||
UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE);
|
UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case com.android.internal.R.styleable.TextView_autoSizeMaxTextSize:
|
case com.android.internal.R.styleable.TextView_autoSizeMaxTextSize:
|
||||||
autoSizeMaxTextSizeInPx = a.getDimensionPixelSize(attr,
|
autoSizeMaxTextSizeInPx = a.getDimension(attr,
|
||||||
UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE);
|
UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -1692,14 +1692,14 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
||||||
|
|
||||||
if (autoSizeMinTextSizeInPx == UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE) {
|
if (autoSizeMinTextSizeInPx == UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE) {
|
||||||
autoSizeMinTextSizeInPx = (int) TypedValue.applyDimension(
|
autoSizeMinTextSizeInPx = TypedValue.applyDimension(
|
||||||
TypedValue.COMPLEX_UNIT_SP,
|
TypedValue.COMPLEX_UNIT_SP,
|
||||||
DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP,
|
DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP,
|
||||||
displayMetrics);
|
displayMetrics);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (autoSizeMaxTextSizeInPx == UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE) {
|
if (autoSizeMaxTextSizeInPx == UNSET_AUTO_SIZE_UNIFORM_CONFIGURATION_VALUE) {
|
||||||
autoSizeMaxTextSizeInPx = (int) TypedValue.applyDimension(
|
autoSizeMaxTextSizeInPx = TypedValue.applyDimension(
|
||||||
TypedValue.COMPLEX_UNIT_SP,
|
TypedValue.COMPLEX_UNIT_SP,
|
||||||
DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP,
|
DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP,
|
||||||
displayMetrics);
|
displayMetrics);
|
||||||
@@ -1744,11 +1744,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
break;
|
break;
|
||||||
case AUTO_SIZE_TEXT_TYPE_UNIFORM:
|
case AUTO_SIZE_TEXT_TYPE_UNIFORM:
|
||||||
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
||||||
final int autoSizeMinTextSizeInPx = (int) TypedValue.applyDimension(
|
final float autoSizeMinTextSizeInPx = TypedValue.applyDimension(
|
||||||
TypedValue.COMPLEX_UNIT_SP,
|
TypedValue.COMPLEX_UNIT_SP,
|
||||||
DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP,
|
DEFAULT_AUTO_SIZE_MIN_TEXT_SIZE_IN_SP,
|
||||||
displayMetrics);
|
displayMetrics);
|
||||||
final int autoSizeMaxTextSizeInPx = (int) TypedValue.applyDimension(
|
final float autoSizeMaxTextSizeInPx = TypedValue.applyDimension(
|
||||||
TypedValue.COMPLEX_UNIT_SP,
|
TypedValue.COMPLEX_UNIT_SP,
|
||||||
DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP,
|
DEFAULT_AUTO_SIZE_MAX_TEXT_SIZE_IN_SP,
|
||||||
displayMetrics);
|
displayMetrics);
|
||||||
@@ -1797,11 +1797,11 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) {
|
int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) {
|
||||||
if (supportsAutoSizeText()) {
|
if (supportsAutoSizeText()) {
|
||||||
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
||||||
final int autoSizeMinTextSizeInPx = (int) TypedValue.applyDimension(
|
final float autoSizeMinTextSizeInPx = TypedValue.applyDimension(
|
||||||
unit, autoSizeMinTextSize, displayMetrics);
|
unit, autoSizeMinTextSize, displayMetrics);
|
||||||
final int autoSizeMaxTextSizeInPx = (int) TypedValue.applyDimension(
|
final float autoSizeMaxTextSizeInPx = TypedValue.applyDimension(
|
||||||
unit, autoSizeMaxTextSize, displayMetrics);
|
unit, autoSizeMaxTextSize, displayMetrics);
|
||||||
final int autoSizeStepGranularityInPx = (int) TypedValue.applyDimension(
|
final float autoSizeStepGranularityInPx = TypedValue.applyDimension(
|
||||||
unit, autoSizeStepGranularity, displayMetrics);
|
unit, autoSizeStepGranularity, displayMetrics);
|
||||||
|
|
||||||
validateAndSetAutoSizeTextTypeUniformConfiguration(autoSizeMinTextSizeInPx,
|
validateAndSetAutoSizeTextTypeUniformConfiguration(autoSizeMinTextSizeInPx,
|
||||||
@@ -1843,8 +1843,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
|
||||||
// Convert all to sizes to pixels.
|
// Convert all to sizes to pixels.
|
||||||
for (int i = 0; i < presetSizesLength; i++) {
|
for (int i = 0; i < presetSizesLength; i++) {
|
||||||
presetSizesInPx[i] = (int) TypedValue.applyDimension(unit, presetSizes[i],
|
presetSizesInPx[i] = Math.round(TypedValue.applyDimension(unit,
|
||||||
displayMetrics);
|
presetSizes[i], displayMetrics));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1886,7 +1886,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
* @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
|
* @see #setAutoSizeTextTypeUniformWithConfiguration(int, int, int, int)
|
||||||
*/
|
*/
|
||||||
public int getAutoSizeStepGranularity() {
|
public int getAutoSizeStepGranularity() {
|
||||||
return mAutoSizeStepGranularityInPx;
|
return Math.round(mAutoSizeStepGranularityInPx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1899,7 +1899,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
* @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
|
* @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
|
||||||
*/
|
*/
|
||||||
public int getAutoSizeMinTextSize() {
|
public int getAutoSizeMinTextSize() {
|
||||||
return mAutoSizeMinTextSizeInPx;
|
return Math.round(mAutoSizeMinTextSizeInPx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1912,7 +1912,7 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
* @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
|
* @see #setAutoSizeTextTypeUniformWithPresetSizes(int[], int)
|
||||||
*/
|
*/
|
||||||
public int getAutoSizeMaxTextSize() {
|
public int getAutoSizeMaxTextSize() {
|
||||||
return mAutoSizeMaxTextSizeInPx;
|
return Math.round(mAutoSizeMaxTextSizeInPx);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1955,8 +1955,8 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
*
|
*
|
||||||
* @throws IllegalArgumentException if any of the params are invalid
|
* @throws IllegalArgumentException if any of the params are invalid
|
||||||
*/
|
*/
|
||||||
private void validateAndSetAutoSizeTextTypeUniformConfiguration(int autoSizeMinTextSizeInPx,
|
private void validateAndSetAutoSizeTextTypeUniformConfiguration(float autoSizeMinTextSizeInPx,
|
||||||
int autoSizeMaxTextSizeInPx, int autoSizeStepGranularityInPx) {
|
float autoSizeMaxTextSizeInPx, float autoSizeStepGranularityInPx) {
|
||||||
// First validate.
|
// First validate.
|
||||||
if (autoSizeMinTextSizeInPx <= 0) {
|
if (autoSizeMinTextSizeInPx <= 0) {
|
||||||
throw new IllegalArgumentException("Minimum auto-size text size ("
|
throw new IllegalArgumentException("Minimum auto-size text size ("
|
||||||
@@ -2022,18 +2022,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
|
|||||||
// Calculate sizes to choose from based on the current auto-size configuration.
|
// Calculate sizes to choose from based on the current auto-size configuration.
|
||||||
int autoSizeValuesLength = (int) Math.ceil(
|
int autoSizeValuesLength = (int) Math.ceil(
|
||||||
(mAutoSizeMaxTextSizeInPx - mAutoSizeMinTextSizeInPx)
|
(mAutoSizeMaxTextSizeInPx - mAutoSizeMinTextSizeInPx)
|
||||||
/ (float) mAutoSizeStepGranularityInPx);
|
/ mAutoSizeStepGranularityInPx);
|
||||||
// Also reserve a slot for the max size if it fits.
|
// Also reserve a slot for the max size if it fits.
|
||||||
if ((mAutoSizeMaxTextSizeInPx - mAutoSizeMinTextSizeInPx)
|
if ((mAutoSizeMaxTextSizeInPx - mAutoSizeMinTextSizeInPx)
|
||||||
% mAutoSizeStepGranularityInPx == 0) {
|
% mAutoSizeStepGranularityInPx == 0) {
|
||||||
autoSizeValuesLength++;
|
autoSizeValuesLength++;
|
||||||
}
|
}
|
||||||
mAutoSizeTextSizesInPx = new int[autoSizeValuesLength];
|
int[] autoSizeTextSizesInPx = new int[autoSizeValuesLength];
|
||||||
int sizeToAdd = mAutoSizeMinTextSizeInPx;
|
float sizeToAdd = mAutoSizeMinTextSizeInPx;
|
||||||
for (int i = 0; i < autoSizeValuesLength; i++) {
|
for (int i = 0; i < autoSizeValuesLength; i++) {
|
||||||
mAutoSizeTextSizesInPx[i] = sizeToAdd;
|
autoSizeTextSizesInPx[i] = Math.round(sizeToAdd);
|
||||||
sizeToAdd += mAutoSizeStepGranularityInPx;
|
sizeToAdd += mAutoSizeStepGranularityInPx;
|
||||||
}
|
}
|
||||||
|
mAutoSizeTextSizesInPx = cleanupAutoSizePresetSizes(autoSizeTextSizesInPx);
|
||||||
}
|
}
|
||||||
|
|
||||||
mNeedsAutoSizeText = true;
|
mNeedsAutoSizeText = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user