diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 52683da..8b3687a 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -293,7 +293,7 @@
         <attr name="keyLabelFlags" format="integer">
             <!-- This should be aligned with Key.LABEL_FLAGS__* -->
             <flag name="alignIconToBottom" value="0x04" />
-            <flag name="alignLeftOfCenter" value="0x08" />
+            <flag name="alignLabelOffCenter" value="0x08" />
             <flag name="fontNormal" value="0x10" />
             <flag name="fontMonoSpace" value="0x20" />
             <flag name="fontDefault" value="0x30" />
@@ -365,6 +365,14 @@
         <attr name="keyHintLabelRatio" format="fraction" />
         <!-- Size of the text for shifted letter hint, in the proportion of key height. -->
         <attr name="keyShiftedLetterHintRatio" format="fraction" />
+        <!-- The label's horizontal offset to the center of the key. Negative is to left and
+             positive is to right. The value is in proportion of the width of
+             TypefaceUtils.KEY_LABEL_REFERENCE_CHAR. -->
+        <attr name="keyLabelOffCenterRatio" format="fraction" />
+        <!-- The hint label's horizontal offset to the center of the key. Negative is to left and
+             positive is to right. The value is in proportion of the width of
+             TypefaceUtils.KEY_LABEL_REFERENCE_CHAR. -->
+        <attr name="keyHintLabelOffCenterRatio" format="fraction" />
         <!-- Color to use for the label in a key. -->
         <attr name="keyTextColor" format="color" />
         <attr name="keyTextShadowColor" format="color" />
diff --git a/java/res/values/themes-common.xml b/java/res/values/themes-common.xml
index 44b1c7b..696a99c 100644
--- a/java/res/values/themes-common.xml
+++ b/java/res/values/themes-common.xml
@@ -40,6 +40,8 @@
         <item name="keyHintLetterRatio">@fraction/config_key_hint_letter_ratio</item>
         <item name="keyHintLabelRatio">@fraction/config_key_hint_label_ratio</item>
         <item name="keyShiftedLetterHintRatio">@fraction/config_key_shifted_letter_hint_ratio</item>
+        <item name="keyLabelOffCenterRatio">-175%</item>
+        <item name="keyHintLabelOffCenterRatio">200%</item>
         <item name="keyTypeface">normal</item>
         <!-- A negative value to disable key text shadow layer. -->
         <item name="keyTextShadowRadius">-1.0</item>
diff --git a/java/res/xml/key_styles_number.xml b/java/res/xml/key_styles_number.xml
index 3038097..14b2028 100644
--- a/java/res/xml/key_styles_number.xml
+++ b/java/res/xml/key_styles_number.xml
@@ -39,7 +39,7 @@
         latin:parentStyle="numKeyBaseStyle" />
     <key-style
         latin:styleName="numberKeyStyle"
-        latin:keyLabelFlags="alignLeftOfCenter|hasHintLabel"
+        latin:keyLabelFlags="alignLabelOffCenter|hasHintLabel"
         latin:parentStyle="numKeyStyle" />
     <key-style
         latin:styleName="num0KeyStyle"
diff --git a/java/src/com/android/inputmethod/keyboard/Key.java b/java/src/com/android/inputmethod/keyboard/Key.java
index b7f6d26..f8c0058 100644
--- a/java/src/com/android/inputmethod/keyboard/Key.java
+++ b/java/src/com/android/inputmethod/keyboard/Key.java
@@ -59,7 +59,7 @@
     /** Flags of the label */
     private final int mLabelFlags;
     private static final int LABEL_FLAGS_ALIGN_ICON_TO_BOTTOM = 0x04;
-    private static final int LABEL_FLAGS_ALIGN_LEFT_OF_CENTER = 0x08;
+    private static final int LABEL_FLAGS_ALIGN_LABEL_OFF_CENTER = 0x08;
     // Font typeface specification.
     private static final int LABEL_FLAGS_FONT_MASK = 0x30;
     private static final int LABEL_FLAGS_FONT_NORMAL = 0x10;
@@ -645,8 +645,8 @@
         return (mLabelFlags & LABEL_FLAGS_ALIGN_ICON_TO_BOTTOM) != 0;
     }
 
-    public final boolean isAlignLeftOfCenter() {
-        return (mLabelFlags & LABEL_FLAGS_ALIGN_LEFT_OF_CENTER) != 0;
+    public final boolean isAlignLabelOffCenter() {
+        return (mLabelFlags & LABEL_FLAGS_ALIGN_LABEL_OFF_CENTER) != 0;
     }
 
     public final boolean hasPopupHint() {
diff --git a/java/src/com/android/inputmethod/keyboard/KeyboardView.java b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
index 4a791f3..72b2547 100644
--- a/java/src/com/android/inputmethod/keyboard/KeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/KeyboardView.java
@@ -369,9 +369,9 @@
             final float baseline = centerY + labelCharHeight / 2.0f;
 
             // Horizontal label text alignment
-            if (key.isAlignLeftOfCenter()) {
-                // TODO: Parameterise this?
-                positionX = centerX - labelCharWidth * 7.0f / 4.0f;
+            if (key.isAlignLabelOffCenter()) {
+                // The label is placed off center of the key. Used mainly on "phone number" layout.
+                positionX = centerX + params.mLabelOffCenterRatio * labelCharWidth;
                 paint.setTextAlign(Align.LEFT);
             } else {
                 positionX = centerX;
@@ -418,15 +418,12 @@
             blendAlpha(paint, params.mAnimAlpha);
             final float labelCharHeight = TypefaceUtils.getReferenceCharHeight(paint);
             final float labelCharWidth = TypefaceUtils.getReferenceCharWidth(paint);
-            final KeyVisualAttributes visualAttr = key.getVisualAttributes();
-            final float adjustmentY = (visualAttr == null) ? 0.0f
-                    : visualAttr.mHintLabelVerticalAdjustment * labelCharHeight;
+            final float adjustmentY = params.mHintLabelVerticalAdjustment * labelCharHeight;
             final float hintX, hintY;
             if (key.hasHintLabel()) {
                 // The hint label is placed just right of the key label. Used mainly on
                 // "phone number" layout.
-                // TODO: Generalize the following calculations.
-                hintX = positionX + labelCharWidth * 2.0f;
+                hintX = positionX + params.mHintLabelOffCenterRatio * labelCharWidth;
                 hintY = centerY + labelCharHeight / 2.0f;
                 paint.setTextAlign(Align.LEFT);
             } else if (key.hasShiftedLetterHint()) {
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java b/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java
index 72477ce..df50efd 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyDrawParams.java
@@ -41,6 +41,10 @@
     public int mShiftedLetterHintActivatedColor;
     public int mPreviewTextColor;
 
+    public float mHintLabelVerticalAdjustment;
+    public float mLabelOffCenterRatio;
+    public float mHintLabelOffCenterRatio;
+
     public int mAnimAlpha;
 
     public KeyDrawParams() {}
@@ -66,6 +70,10 @@
         mShiftedLetterHintActivatedColor = copyFrom.mShiftedLetterHintActivatedColor;
         mPreviewTextColor = copyFrom.mPreviewTextColor;
 
+        mHintLabelVerticalAdjustment = copyFrom.mHintLabelVerticalAdjustment;
+        mLabelOffCenterRatio = copyFrom.mLabelOffCenterRatio;
+        mHintLabelOffCenterRatio = copyFrom.mHintLabelOffCenterRatio;
+
         mAnimAlpha = copyFrom.mAnimAlpha;
     }
 
@@ -100,6 +108,13 @@
         mShiftedLetterHintActivatedColor = selectColor(
                 attr.mShiftedLetterHintActivatedColor, mShiftedLetterHintActivatedColor);
         mPreviewTextColor = selectColor(attr.mPreviewTextColor, mPreviewTextColor);
+
+        mHintLabelVerticalAdjustment = selectFloatIfNonZero(
+                attr.mHintLabelVerticalAdjustment, mHintLabelVerticalAdjustment);
+        mLabelOffCenterRatio = selectFloatIfNonZero(
+                attr.mLabelOffCenterRatio, mLabelOffCenterRatio);
+        mHintLabelOffCenterRatio = selectFloatIfNonZero(
+                attr.mHintLabelOffCenterRatio, mHintLabelOffCenterRatio);
     }
 
     public KeyDrawParams mayCloneAndUpdateParams(final int keyHeight,
@@ -112,7 +127,7 @@
         return newParams;
     }
 
-    private static final int selectTextSizeFromDimensionOrRatio(final int keyHeight,
+    private static int selectTextSizeFromDimensionOrRatio(final int keyHeight,
             final int dimens, final float ratio, final int defaultDimens) {
         if (ResourceUtils.isValidDimensionPixelSize(dimens)) {
             return dimens;
@@ -123,7 +138,7 @@
         return defaultDimens;
     }
 
-    private static final int selectTextSize(final int keyHeight, final float ratio,
+    private static int selectTextSize(final int keyHeight, final float ratio,
             final int defaultSize) {
         if (ResourceUtils.isValidFraction(ratio)) {
             return (int)(keyHeight * ratio);
@@ -131,10 +146,17 @@
         return defaultSize;
     }
 
-    private static final int selectColor(final int attrColor, final int defaultColor) {
+    private static int selectColor(final int attrColor, final int defaultColor) {
         if (attrColor != 0) {
             return attrColor;
         }
         return defaultColor;
     }
+
+    private static float selectFloatIfNonZero(final float attrFloat, final float defaultFloat) {
+        if (attrFloat != 0) {
+            return attrFloat;
+        }
+        return defaultFloat;
+    }
 }
diff --git a/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java b/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java
index b94f483..c60d587 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/KeyVisualAttributes.java
@@ -47,6 +47,8 @@
     public final int mPreviewTextColor;
 
     public final float mHintLabelVerticalAdjustment;
+    public final float mLabelOffCenterRatio;
+    public final float mHintLabelOffCenterRatio;
 
     private static final int[] VISUAL_ATTRIBUTE_IDS = {
         R.styleable.Keyboard_Key_keyTypeface,
@@ -67,6 +69,8 @@
         R.styleable.Keyboard_Key_keyShiftedLetterHintActivatedColor,
         R.styleable.Keyboard_Key_keyPreviewTextColor,
         R.styleable.Keyboard_Key_keyHintLabelVerticalAdjustment,
+        R.styleable.Keyboard_Key_keyLabelOffCenterRatio,
+        R.styleable.Keyboard_Key_keyHintLabelOffCenterRatio
     };
     private static final SparseIntArray sVisualAttributeIds = new SparseIntArray();
     private static final int ATTR_DEFINED = 1;
@@ -131,5 +135,9 @@
 
         mHintLabelVerticalAdjustment = ResourceUtils.getFraction(keyAttr,
                 R.styleable.Keyboard_Key_keyHintLabelVerticalAdjustment, 0.0f);
+        mLabelOffCenterRatio = ResourceUtils.getFraction(keyAttr,
+                R.styleable.Keyboard_Key_keyLabelOffCenterRatio, 0.0f);
+        mHintLabelOffCenterRatio = ResourceUtils.getFraction(keyAttr,
+                R.styleable.Keyboard_Key_keyHintLabelOffCenterRatio, 0.0f);
     }
 }
