Loading res/values/dimens.xml +4 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,10 @@ <dimen name="drop_target_top_margin">36dp</dimen> <dimen name="drop_target_bottom_margin">16dp</dimen> <!-- Button drop target bar --> <dimen name="button_drop_target_min_text_size">10sp</dimen> <dimen name="button_drop_target_resize_text_increment">1sp</dimen> <!-- App Widget resize frame --> <dimen name="widget_handle_margin">13dp</dimen> <dimen name="resize_frame_background_padding">24dp</dimen> Loading src/com/android/launcher3/ButtonDropTarget.java +35 −1 Original line number Diff line number Diff line Loading @@ -324,6 +324,40 @@ public abstract class ButtonDropTarget extends TextView hideTooltip(); } /** * Reduce the size of the text until it fits or reaches a minimum. * * The minimum size is defined by {@code R.dimen.button_drop_target_min_text_size} and * it diminishes by intervals defined by * {@code R.dimen.button_drop_target_resize_text_increment} * This functionality is very similar to the option * {@link TextView#setAutoSizeTextTypeWithDefaults(int)} but can't be used in this view because * the layout width is {@code WRAP_CONTENT}. * * @param availableWidth Available width in the button to fit the text, used in * {@code ButtonDropTarget#isTextTruncated(int)} * @return The biggest text size in SP that makes the text fit or if the text can't fit returns * the min available value */ public float resizeTextToFit(int availableWidth) { float minSize = Utilities.pxToSp(getResources() .getDimensionPixelSize(R.dimen.button_drop_target_min_text_size)); float step = Utilities.pxToSp(getResources() .getDimensionPixelSize(R.dimen.button_drop_target_resize_text_increment)); float textSize = Utilities.pxToSp(getTextSize()); while (textSize > minSize) { if (isTextTruncated(availableWidth)) { textSize -= step; setTextSize(textSize); } else { return textSize; } } return minSize; } public boolean isTextTruncated(int availableWidth) { availableWidth -= (getPaddingLeft() + getPaddingRight() + mDrawable.getIntrinsicWidth() + getCompoundDrawablePadding()); Loading src/com/android/launcher3/DropTargetBar.java +16 −3 Original line number Diff line number Diff line Loading @@ -140,9 +140,22 @@ public class DropTargetBar extends FrameLayout if (visibleCount > 0) { int availableWidth = width / visibleCount; boolean textVisible = true; for (ButtonDropTarget buttons : mDropTargets) { if (buttons.getVisibility() != GONE) { textVisible = textVisible && !buttons.isTextTruncated(availableWidth); boolean textResized = false; float textSize = mDropTargets[0].getTextSize(); for (ButtonDropTarget button : mDropTargets) { if (button.getVisibility() == GONE) { continue; } if (button.isTextTruncated(availableWidth)) { textSize = Math.min(textSize, button.resizeTextToFit(availableWidth)); textResized = true; } textVisible = textVisible && !button.isTextTruncated(availableWidth); } if (textResized) { for (ButtonDropTarget button : mDropTargets) { button.setTextSize(textSize); } } Loading src/com/android/launcher3/Utilities.java +5 −0 Original line number Diff line number Diff line Loading @@ -483,6 +483,11 @@ public final class Utilities { return res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; } /** Converts a pixel value (px) to scale pixel value (SP) for the current device. */ public static float pxToSp(float size) { return size / Resources.getSystem().getDisplayMetrics().scaledDensity; } public static float dpiFromPx(float size, int densityDpi) { float densityRatio = (float) densityDpi / DisplayMetrics.DENSITY_DEFAULT; return (size / densityRatio); Loading Loading
res/values/dimens.xml +4 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,10 @@ <dimen name="drop_target_top_margin">36dp</dimen> <dimen name="drop_target_bottom_margin">16dp</dimen> <!-- Button drop target bar --> <dimen name="button_drop_target_min_text_size">10sp</dimen> <dimen name="button_drop_target_resize_text_increment">1sp</dimen> <!-- App Widget resize frame --> <dimen name="widget_handle_margin">13dp</dimen> <dimen name="resize_frame_background_padding">24dp</dimen> Loading
src/com/android/launcher3/ButtonDropTarget.java +35 −1 Original line number Diff line number Diff line Loading @@ -324,6 +324,40 @@ public abstract class ButtonDropTarget extends TextView hideTooltip(); } /** * Reduce the size of the text until it fits or reaches a minimum. * * The minimum size is defined by {@code R.dimen.button_drop_target_min_text_size} and * it diminishes by intervals defined by * {@code R.dimen.button_drop_target_resize_text_increment} * This functionality is very similar to the option * {@link TextView#setAutoSizeTextTypeWithDefaults(int)} but can't be used in this view because * the layout width is {@code WRAP_CONTENT}. * * @param availableWidth Available width in the button to fit the text, used in * {@code ButtonDropTarget#isTextTruncated(int)} * @return The biggest text size in SP that makes the text fit or if the text can't fit returns * the min available value */ public float resizeTextToFit(int availableWidth) { float minSize = Utilities.pxToSp(getResources() .getDimensionPixelSize(R.dimen.button_drop_target_min_text_size)); float step = Utilities.pxToSp(getResources() .getDimensionPixelSize(R.dimen.button_drop_target_resize_text_increment)); float textSize = Utilities.pxToSp(getTextSize()); while (textSize > minSize) { if (isTextTruncated(availableWidth)) { textSize -= step; setTextSize(textSize); } else { return textSize; } } return minSize; } public boolean isTextTruncated(int availableWidth) { availableWidth -= (getPaddingLeft() + getPaddingRight() + mDrawable.getIntrinsicWidth() + getCompoundDrawablePadding()); Loading
src/com/android/launcher3/DropTargetBar.java +16 −3 Original line number Diff line number Diff line Loading @@ -140,9 +140,22 @@ public class DropTargetBar extends FrameLayout if (visibleCount > 0) { int availableWidth = width / visibleCount; boolean textVisible = true; for (ButtonDropTarget buttons : mDropTargets) { if (buttons.getVisibility() != GONE) { textVisible = textVisible && !buttons.isTextTruncated(availableWidth); boolean textResized = false; float textSize = mDropTargets[0].getTextSize(); for (ButtonDropTarget button : mDropTargets) { if (button.getVisibility() == GONE) { continue; } if (button.isTextTruncated(availableWidth)) { textSize = Math.min(textSize, button.resizeTextToFit(availableWidth)); textResized = true; } textVisible = textVisible && !button.isTextTruncated(availableWidth); } if (textResized) { for (ButtonDropTarget button : mDropTargets) { button.setTextSize(textSize); } } Loading
src/com/android/launcher3/Utilities.java +5 −0 Original line number Diff line number Diff line Loading @@ -483,6 +483,11 @@ public final class Utilities { return res.getConfiguration().getLayoutDirection() == View.LAYOUT_DIRECTION_RTL; } /** Converts a pixel value (px) to scale pixel value (SP) for the current device. */ public static float pxToSp(float size) { return size / Resources.getSystem().getDisplayMetrics().scaledDensity; } public static float dpiFromPx(float size, int densityDpi) { float densityRatio = (float) densityDpi / DisplayMetrics.DENSITY_DEFAULT; return (size / densityRatio); Loading