From db776143d940b28abb1b0aa1dcab62a945571990 Mon Sep 17 00:00:00 2001 From: "Tadashi G. Takaoka" Date: Thu, 7 Aug 2014 23:44:34 +0900 Subject: [PATCH] Revert "Revert "Align hint label to bottom"" This reverts commit 02c4a80afea802859c5cb4d1033a7374c3132c96. --- java/res/values/attrs.xml | 1 + java/res/values/themes-lxx.xml | 5 ++- .../com/android/inputmethod/keyboard/Key.java | 5 +++ .../inputmethod/keyboard/KeyboardView.java | 37 +++++++++++++------ 4 files changed, 34 insertions(+), 14 deletions(-) diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml index 8b3687a8c..bfe385698 100644 --- a/java/res/values/attrs.xml +++ b/java/res/values/attrs.xml @@ -292,6 +292,7 @@ + diff --git a/java/res/values/themes-lxx.xml b/java/res/values/themes-lxx.xml index f4e7933bb..1c33cd60b 100644 --- a/java/res/values/themes-lxx.xml +++ b/java/res/values/themes-lxx.xml @@ -26,9 +26,10 @@ > normal @fraction/config_key_large_letter_ratio_lxx - -100% + -80% @fraction/config_key_hint_label_ratio_lxx - 400% + 300% + alignHintLabelToBottom 0.9 diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java index f8c005845..618d38962 100644 --- a/java/src/com/android/inputmethod/keyboard/Key.java +++ b/java/src/com/android/inputmethod/keyboard/Key.java @@ -58,6 +58,7 @@ public class Key implements Comparable { private final String mHintLabel; /** Flags of the label */ private final int mLabelFlags; + private static final int LABEL_FLAGS_ALIGN_HINT_LABEL_TO_BOTTOM = 0x02; private static final int LABEL_FLAGS_ALIGN_ICON_TO_BOTTOM = 0x04; private static final int LABEL_FLAGS_ALIGN_LABEL_OFF_CENTER = 0x08; // Font typeface specification. @@ -641,6 +642,10 @@ public class Key implements Comparable { return Typeface.DEFAULT_BOLD; } + public final boolean isAlignHintLabelToBottom(final int defaultFlags) { + return ((mLabelFlags | defaultFlags) & LABEL_FLAGS_ALIGN_HINT_LABEL_TO_BOTTOM) != 0; + } + public final boolean isAlignIconToBottom() { return (mLabelFlags & LABEL_FLAGS_ALIGN_ICON_TO_BOTTOM) != 0; } diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java index 72b254756..075cd901d 100644 --- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java +++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java @@ -48,6 +48,7 @@ import java.util.HashSet; * @attr ref R.styleable#KeyboardView_functionalKeyBackground * @attr ref R.styleable#KeyboardView_spacebarBackground * @attr ref R.styleable#KeyboardView_spacebarIconWidthRatio + * @attr ref R.styleable#Keyboard_Key_keyLabelFlags * @attr ref R.styleable#KeyboardView_keyHintLetterPadding * @attr ref R.styleable#KeyboardView_keyPopupHintLetter * @attr ref R.styleable#KeyboardView_keyPopupHintLetterPadding @@ -62,6 +63,8 @@ import java.util.HashSet; * @attr ref R.styleable#Keyboard_Key_keyHintLetterRatio * @attr ref R.styleable#Keyboard_Key_keyShiftedLetterHintRatio * @attr ref R.styleable#Keyboard_Key_keyHintLabelRatio + * @attr ref R.styleable#Keyboard_Key_keyLabelOffCenterRatio + * @attr ref R.styleable#Keyboard_Key_keyHintLabelOffCenterRatio * @attr ref R.styleable#Keyboard_Key_keyPreviewTextRatio * @attr ref R.styleable#Keyboard_Key_keyTextColor * @attr ref R.styleable#Keyboard_Key_keyTextColorDisabled @@ -75,6 +78,9 @@ import java.util.HashSet; public class KeyboardView extends View { // XML attributes private final KeyVisualAttributes mKeyVisualAttributes; + // Default keyLabelFlags from {@link KeyboardTheme}. + // Currently only "alignHintLabelToBottom" is supported. + private final int mDefaultKeyLabelFlags; private final float mKeyHintLetterPadding; private final String mKeyPopupHintLetter; private final float mKeyPopupHintLetterPadding; @@ -146,6 +152,7 @@ public class KeyboardView extends View { final TypedArray keyAttr = context.obtainStyledAttributes(attrs, R.styleable.Keyboard_Key, defStyle, R.style.KeyboardView); + mDefaultKeyLabelFlags = keyAttr.getInt(R.styleable.Keyboard_Key_keyLabelFlags, 0); mKeyVisualAttributes = KeyVisualAttributes.newInstance(keyAttr); keyAttr.recycle(); @@ -357,7 +364,8 @@ public class KeyboardView extends View { // Draw key label. final Drawable icon = key.getIcon(mKeyboard.mIconsSet, params.mAnimAlpha); - float positionX = centerX; + float labelX = centerX; + float labelBaseline = centerY; final String label = key.getLabel(); if (label != null) { paint.setTypeface(key.selectTypeface(params)); @@ -366,15 +374,15 @@ public class KeyboardView extends View { final float labelCharWidth = TypefaceUtils.getReferenceCharWidth(paint); // Vertical label text alignment. - final float baseline = centerY + labelCharHeight / 2.0f; + labelBaseline = centerY + labelCharHeight / 2.0f; // Horizontal label text alignment if (key.isAlignLabelOffCenter()) { // The label is placed off center of the key. Used mainly on "phone number" layout. - positionX = centerX + params.mLabelOffCenterRatio * labelCharWidth; + labelX = centerX + params.mLabelOffCenterRatio * labelCharWidth; paint.setTextAlign(Align.LEFT); } else { - positionX = centerX; + labelX = centerX; paint.setTextAlign(Align.CENTER); } if (key.needsAutoXScale()) { @@ -402,7 +410,7 @@ public class KeyboardView extends View { paint.clearShadowLayer(); } blendAlpha(paint, params.mAnimAlpha); - canvas.drawText(label, 0, label.length(), positionX, baseline, paint); + canvas.drawText(label, 0, label.length(), labelX, labelBaseline, paint); // Turn off drop shadow and reset x-scale. paint.clearShadowLayer(); paint.setTextScaleX(1.0f); @@ -418,19 +426,22 @@ public class KeyboardView extends View { blendAlpha(paint, params.mAnimAlpha); final float labelCharHeight = TypefaceUtils.getReferenceCharHeight(paint); final float labelCharWidth = TypefaceUtils.getReferenceCharWidth(paint); - final float adjustmentY = params.mHintLabelVerticalAdjustment * labelCharHeight; - final float hintX, hintY; + final float hintX, hintBaseline; if (key.hasHintLabel()) { // The hint label is placed just right of the key label. Used mainly on // "phone number" layout. - hintX = positionX + params.mHintLabelOffCenterRatio * labelCharWidth; - hintY = centerY + labelCharHeight / 2.0f; + hintX = labelX + params.mHintLabelOffCenterRatio * labelCharWidth; + if (key.isAlignHintLabelToBottom(mDefaultKeyLabelFlags)) { + hintBaseline = labelBaseline; + } else { + hintBaseline = centerY + labelCharHeight / 2.0f; + } paint.setTextAlign(Align.LEFT); } else if (key.hasShiftedLetterHint()) { // The hint label is placed at top-right corner of the key. Used mainly on tablet. hintX = keyWidth - mKeyShiftedLetterHintPadding - labelCharWidth / 2.0f; paint.getFontMetrics(mFontMetrics); - hintY = -mFontMetrics.top; + hintBaseline = -mFontMetrics.top; paint.setTextAlign(Align.CENTER); } else { // key.hasHintLetter() // The hint letter is placed at top-right corner of the key. Used mainly on phone. @@ -438,10 +449,12 @@ public class KeyboardView extends View { final float hintLabelWidth = TypefaceUtils.getStringWidth(hintLabel, paint); hintX = keyWidth - mKeyHintLetterPadding - Math.max(hintDigitWidth, hintLabelWidth) / 2.0f; - hintY = -paint.ascent(); + hintBaseline = -paint.ascent(); paint.setTextAlign(Align.CENTER); } - canvas.drawText(hintLabel, 0, hintLabel.length(), hintX, hintY + adjustmentY, paint); + final float adjustmentY = params.mHintLabelVerticalAdjustment * labelCharHeight; + canvas.drawText( + hintLabel, 0, hintLabel.length(), hintX, hintBaseline + adjustmentY, paint); } // Draw key icon.