diff --git a/java/res/values-land/dimens.xml b/java/res/values-land/dimens.xml
index 9de201e..0f9bde8 100644
--- a/java/res/values-land/dimens.xml
+++ b/java/res/values-land/dimens.xml
@@ -60,7 +60,10 @@
 
     <dimen name="suggestions_strip_height">36dip</dimen>
     <dimen name="more_suggestions_row_height">36dip</dimen>
-    <dimen name="key_preview_backing_height">36dip</dimen>
+    <integer name="max_more_suggestions_row">2</integer>
+    <fraction name="min_more_suggestions_width">60%</fraction>
+    <!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
+    <dimen name="key_preview_backing_height">72dip</dimen>
     <!-- Amount of allowance for selecting keys in a mini popup keyboard by sliding finger. -->
     <!-- popup_key_height x 1.2 -->
     <dimen name="mini_keyboard_slide_allowance">0.336in</dimen>
diff --git a/java/res/values-sw600dp-land/dimens.xml b/java/res/values-sw600dp-land/dimens.xml
index f1715af..c1cef1d 100644
--- a/java/res/values-sw600dp-land/dimens.xml
+++ b/java/res/values-sw600dp-land/dimens.xml
@@ -51,4 +51,8 @@
     <fraction name="key_uppercase_letter_ratio">29%</fraction>
 
     <dimen name="suggestions_strip_padding">40.0mm</dimen>
+    <integer name="max_more_suggestions_row">5</integer>
+    <fraction name="min_more_suggestions_width">50%</fraction>
+    <!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
+    <dimen name="key_preview_backing_height">220dip</dimen>
 </resources>
diff --git a/java/res/values-sw600dp/dimens.xml b/java/res/values-sw600dp/dimens.xml
index 3b87fd6..d02b4ea 100644
--- a/java/res/values-sw600dp/dimens.xml
+++ b/java/res/values-sw600dp/dimens.xml
@@ -68,7 +68,10 @@
 
     <dimen name="suggestions_strip_height">44dip</dimen>
     <dimen name="more_suggestions_row_height">44dip</dimen>
-    <dimen name="key_preview_backing_height">44dip</dimen>
+    <integer name="max_more_suggestions_row">6</integer>
+    <fraction name="min_more_suggestions_width">90%</fraction>
+    <!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
+    <dimen name="key_preview_backing_height">264dip</dimen>
     <dimen name="suggestions_strip_padding">15.0mm</dimen>
     <dimen name="suggestion_min_width">0.3in</dimen>
     <dimen name="suggestion_padding">12dip</dimen>
diff --git a/java/res/values-sw768dp-land/dimens.xml b/java/res/values-sw768dp-land/dimens.xml
index 7303ea1..8f9b006 100644
--- a/java/res/values-sw768dp-land/dimens.xml
+++ b/java/res/values-sw768dp-land/dimens.xml
@@ -59,4 +59,5 @@
     <dimen name="key_preview_offset_ics">0.05in</dimen>
 
     <dimen name="suggestions_strip_padding">40.0mm</dimen>
+    <fraction name="min_more_suggestions_width">50%</fraction>
 </resources>
diff --git a/java/res/values-sw768dp/dimens.xml b/java/res/values-sw768dp/dimens.xml
index 7f79909..bfc2593 100644
--- a/java/res/values-sw768dp/dimens.xml
+++ b/java/res/values-sw768dp/dimens.xml
@@ -71,7 +71,10 @@
 
     <dimen name="suggestions_strip_height">44dip</dimen>
     <dimen name="more_suggestions_row_height">44dip</dimen>
-    <dimen name="key_preview_backing_height">44dip</dimen>
+    <integer name="max_more_suggestions_row">6</integer>
+    <fraction name="min_more_suggestions_width">90%</fraction>
+    <!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
+    <dimen name="key_preview_backing_height">264dip</dimen>
     <dimen name="suggestions_strip_padding">15.0mm</dimen>
     <dimen name="suggestion_min_width">46dip</dimen>
     <dimen name="suggestion_padding">8dip</dimen>
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 2af2554..20f1e32 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -124,6 +124,8 @@
         <attr name="colorSuggested" format="color" />
         <attr name="suggestionsCountInStrip" format="integer" />
         <attr name="centerSuggestionPercentile" format="integer" />
+        <attr name="maxMoreSuggestionsRow" format="integer" />
+        <attr name="minMoreSuggestionsWidth" format="float" />
     </declare-styleable>
 
     <declare-styleable name="Keyboard">
diff --git a/java/res/values/dimens.xml b/java/res/values/dimens.xml
index 0ec65e3..e753474 100644
--- a/java/res/values/dimens.xml
+++ b/java/res/values/dimens.xml
@@ -80,8 +80,11 @@
     <dimen name="more_suggestions_key_horizontal_padding">12dip</dimen>
     <dimen name="more_suggestions_row_height">40dip</dimen>
     <dimen name="more_suggestions_slide_allowance">0.2in</dimen>
+    <integer name="max_more_suggestions_row">6</integer>
+    <fraction name="min_more_suggestions_width">90%</fraction>
     <fraction name="more_suggestions_info_ratio">18%</fraction>
-    <dimen name="key_preview_backing_height">40dip</dimen>
+    <!-- key_preview_backing_height = more_suggestions_row_height * max_more_suggestions_row -->
+    <dimen name="key_preview_backing_height">160dip</dimen>
     <dimen name="suggestions_strip_padding">0dip</dimen>
     <dimen name="suggestion_min_width">44dip</dimen>
     <dimen name="suggestion_padding">6dip</dimen>
diff --git a/java/res/values/styles.xml b/java/res/values/styles.xml
index 45b98ca..dc2021a 100644
--- a/java/res/values/styles.xml
+++ b/java/res/values/styles.xml
@@ -92,6 +92,8 @@
         <item name="colorSuggested">#FFFCAE00</item>
         <item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item>
         <item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item>
+        <item name="maxMoreSuggestionsRow">@integer/max_more_suggestions_row</item>
+        <item name="minMoreSuggestionsWidth">@fraction/min_more_suggestions_width</item>
     </style>
     <style
         name="MoreSuggestionsViewStyle"
@@ -242,6 +244,8 @@
         <item name="colorSuggested">#FFA7A9AC</item>
         <item name="suggestionsCountInStrip">@integer/suggestions_count_in_strip</item>
         <item name="centerSuggestionPercentile">@integer/center_suggestion_percentile</item>
+        <item name="maxMoreSuggestionsRow">@integer/max_more_suggestions_row</item>
+        <item name="minMoreSuggestionsWidth">@fraction/min_more_suggestions_width</item>
     </style>
     <style
         name="MoreSuggestionsViewStyle.IceCreamSandwich"
diff --git a/java/src/com/android/inputmethod/latin/MoreSuggestions.java b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
index a9e75b7..10d5b5c 100644
--- a/java/src/com/android/inputmethod/latin/MoreSuggestions.java
+++ b/java/src/com/android/inputmethod/latin/MoreSuggestions.java
@@ -50,8 +50,8 @@
             private static final int MAX_COLUMNS_IN_ROW = 3;
             private int mNumRows;
 
-            public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int maxHeight,
-                    KeyboardView view) {
+            public int layout(SuggestedWords suggestions, int fromPos, int maxWidth, int minWidth,
+                    int maxRow, KeyboardView view) {
                 clearKeys();
                 final Paint paint = new Paint();
                 paint.setAntiAlias(true);
@@ -68,7 +68,7 @@
                     final int numColumn = pos - rowStartPos + 1;
                     if (numColumn > MAX_COLUMNS_IN_ROW
                             || !fitInWidth(rowStartPos, pos + 1, maxWidth / numColumn)) {
-                        if ((row + 1) * mDefaultRowHeight > maxHeight) {
+                        if ((row + 1) >= maxRow) {
                             break;
                         }
                         mNumColumnsInRow[row] = pos - rowStartPos;
@@ -81,7 +81,7 @@
                 }
                 mNumColumnsInRow[row] = pos - rowStartPos;
                 mNumRows = row + 1;
-                mWidth = mOccupiedWidth = calcurateMaxRowWidth(fromPos, pos);
+                mWidth = mOccupiedWidth = Math.max(minWidth, calcurateMaxRowWidth(fromPos, pos));
                 mHeight = mOccupiedHeight = mNumRows * mDefaultRowHeight + mVerticalGap;
                 return pos - fromPos;
             }
@@ -163,13 +163,14 @@
         }
 
         public Builder layout(SuggestedWords suggestions, int fromPos, int maxWidth,
-                int maxHeight) {
+                int minWidth, int maxRow) {
             final Keyboard keyboard = KeyboardSwitcher.getInstance().getLatinKeyboard();
             final int xmlId = R.xml.kbd_suggestions_pane_template;
             load(keyboard.mId.cloneWithNewXml(mResources.getResourceEntryName(xmlId), xmlId));
             mParams.mVerticalGap = mParams.mTopPadding = keyboard.mVerticalGap / 2;
 
-            final int count = mParams.layout(suggestions, fromPos, maxWidth, maxHeight, mPaneView);
+            final int count = mParams.layout(suggestions, fromPos, maxWidth, minWidth, maxRow,
+                    mPaneView);
             mFromPos = fromPos;
             mToPos = fromPos + count;
             mSuggestions = suggestions;
diff --git a/java/src/com/android/inputmethod/latin/SuggestionsView.java b/java/src/com/android/inputmethod/latin/SuggestionsView.java
index f11ac1d..e99c6d4 100644
--- a/java/src/com/android/inputmethod/latin/SuggestionsView.java
+++ b/java/src/com/android/inputmethod/latin/SuggestionsView.java
@@ -35,7 +35,6 @@
 import android.text.style.StyleSpan;
 import android.text.style.UnderlineSpan;
 import android.util.AttributeSet;
-import android.util.DisplayMetrics;
 import android.view.Gravity;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -146,12 +145,15 @@
     private static class SuggestionsViewParams {
         private static final int DEFAULT_SUGGESTIONS_COUNT_IN_STRIP = 3;
         private static final int DEFAULT_CENTER_SUGGESTION_PERCENTILE = 40;
+        private static final int DEFAULT_MAX_MORE_SUGGESTIONS_ROW = 2;
         private static final int PUNCTUATIONS_IN_STRIP = 6;
 
         public final int mPadding;
         public final int mDividerWidth;
         public final int mSuggestionsStripHeight;
         public final int mSuggestionsCountInStrip;
+        public final int mMaxMoreSuggestionsRow;
+        public final float mMinMoreSuggestionsWidth;
 
         private final List<TextView> mWords;
         private final List<View> mDividers;
@@ -211,6 +213,11 @@
             mCenterSuggestionWeight = a.getInt(
                     R.styleable.SuggestionsView_centerSuggestionPercentile,
                     DEFAULT_CENTER_SUGGESTION_PERCENTILE) / 100.0f;
+            mMaxMoreSuggestionsRow = a.getInt(
+                    R.styleable.SuggestionsView_maxMoreSuggestionsRow,
+                    DEFAULT_MAX_MORE_SUGGESTIONS_ROW);
+            mMinMoreSuggestionsWidth = getRatio(a,
+                    R.styleable.SuggestionsView_minMoreSuggestionsWidth);
             a.recycle();
 
             mCenterSuggestionIndex = mSuggestionsCountInStrip / 2;
@@ -225,6 +232,11 @@
             mHintToSaveText = context.getText(R.string.hint_add_to_dictionary);
         }
 
+        // Read fraction value in TypedArray as float.
+        private static float getRatio(TypedArray a, int index) {
+            return a.getFraction(index, 1000, 1000, 1) / 1000.0f;
+        }
+
         private CharSequence getStyledSuggestionWord(SuggestedWords suggestions, int pos) {
             final CharSequence word = suggestions.getWord(pos);
             final boolean isAutoCorrect = pos == 1 && willAutoCorrect(suggestions);
@@ -718,11 +730,10 @@
             final View container = mMoreSuggestionsContainer;
             final int maxWidth = stripWidth - container.getPaddingLeft()
                     - container.getPaddingRight();
-            final DisplayMetrics dm = getContext().getResources().getDisplayMetrics();
-            // TODO: Revise how we determine the height
-            final int maxHeight = dm.heightPixels - mKeyboardView.getHeight() - getHeight() * 3;
             final MoreSuggestions.Builder builder = mMoreSuggestionsBuilder;
-            builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth, maxHeight);
+            builder.layout(mSuggestions, params.mSuggestionsCountInStrip, maxWidth,
+                    (int)(maxWidth * params.mMinMoreSuggestionsWidth),
+                    params.mMaxMoreSuggestionsRow);
             mMoreSuggestionsView.setKeyboard(builder.build());
             container.measure(
                     ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
