diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png
deleted file mode 100644
index 5d1cb783300498dc7ad36281638c7202e5133ba4..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_left.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png
deleted file mode 100644
index 3a56d474598627a354d0421d6550aa6c5fccae86..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_feedback_language_arrows_right.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png
deleted file mode 100644
index 79f235f253bb76df160979e884b2e98296b39d5b..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_language_arrows_left.png and /dev/null differ
diff --git a/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png
deleted file mode 100644
index e1444e85bd6f3ddbc87187d2964e09ae8831ea88..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-hdpi/sym_keyboard_language_arrows_right.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png
deleted file mode 100644
index eecb026947eb0775ae9c72932f4d4ad5f497381f..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_left.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png
deleted file mode 100644
index 7e10ae3af88ab3b22c5e0eec9891e9db3c478016..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_feedback_language_arrows_right.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png
deleted file mode 100644
index 7067a8bf54b65507ce870960d14ea94a53a06642..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_language_arrows_left.png and /dev/null differ
diff --git a/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png
deleted file mode 100644
index f7a133d9ecd3e97dc54c8eaa899f47a60513e99a..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-mdpi/sym_keyboard_language_arrows_right.png and /dev/null differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png
deleted file mode 100644
index a90b8dacf01d6d18bcd9902f2783069e17a6b258..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_left.png and /dev/null differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png b/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png
deleted file mode 100644
index 1123bf36e2fa59a7700320d1a619eccfa8bbb8db..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-xhdpi/sym_keyboard_feedback_language_arrows_right.png and /dev/null differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png b/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png
deleted file mode 100644
index 226f2e61763877c571210e8132a2d402c07f8647..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_left.png and /dev/null differ
diff --git a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png b/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png
deleted file mode 100644
index 1e02e7e46b2159afb4e217be6e37c0b34ba67e24..0000000000000000000000000000000000000000
Binary files a/java/res/drawable-xhdpi/sym_keyboard_language_arrows_right.png and /dev/null differ
diff --git a/java/res/values/attrs.xml b/java/res/values/attrs.xml
index 6b063efff1a66d41cc7e718e32a856b72bab0394..61ebf96bfa24f76cdcad85b65b3c2036580c12c1 100644
--- a/java/res/values/attrs.xml
+++ b/java/res/values/attrs.xml
@@ -309,9 +309,5 @@
         <attr name="disabledShortcutIcon" format="reference" />
         <attr name="spacebarTextColor" format="color" />
         <attr name="spacebarTextShadowColor" format="color" />
-        <attr name="spacebarArrowLeftIcon" format="reference" />
-        <attr name="spacebarArrowRightIcon" format="reference" />
-        <attr name="spacebarArrowPreviewLeftIcon" format="reference" />
-        <attr name="spacebarArrowPreviewRightIcon" format="reference" />
     </declare-styleable>
 </resources>
diff --git a/java/res/values/keyboard-icons-black.xml b/java/res/values/keyboard-icons-black.xml
index 708d452cc7af4733290fda5021eb53190b20be5c..e2c68899511f958c3cef9c1d6386c5d5b74d6175 100644
--- a/java/res/values/keyboard-icons-black.xml
+++ b/java/res/values/keyboard-icons-black.xml
@@ -38,9 +38,5 @@
         <!-- LatinKeyboard icons -->
         <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led</item>
         <item name="disabledShortcutIcon">@drawable/sym_bkeyboard_voice_off</item>
-        <item name="spacebarArrowLeftIcon">@null</item>
-        <item name="spacebarArrowRightIcon">@null</item>
-        <item name="spacebarArrowPreviewLeftIcon">@drawable/sym_keyboard_feedback_language_arrows_left</item>
-        <item name="spacebarArrowPreviewRightIcon">@drawable/sym_keyboard_feedback_language_arrows_right</item>
     </style>
 </resources>
diff --git a/java/res/values/keyboard-icons-ics.xml b/java/res/values/keyboard-icons-ics.xml
index 86fb7bb96c7c83687193e7a8db0a6f5934ba5753..c813152848020531bc461dc8ac0dc1b57cf8d4fd 100644
--- a/java/res/values/keyboard-icons-ics.xml
+++ b/java/res/values/keyboard-icons-ics.xml
@@ -52,9 +52,5 @@
         <!-- LatinKeyboard icons -->
         <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led</item>
         <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
-        <item name="spacebarArrowLeftIcon">@drawable/sym_keyboard_language_arrows_left</item>
-        <item name="spacebarArrowRightIcon">@drawable/sym_keyboard_language_arrows_right</item>
-        <item name="spacebarArrowPreviewLeftIcon">@null</item>
-        <item name="spacebarArrowPreviewRightIcon">@null</item>
     </style>
 </resources>
diff --git a/java/res/values/keyboard-icons-white.xml b/java/res/values/keyboard-icons-white.xml
index 63df284763b95ac1c333cf43f8a8a094d9af6ed0..8bc7539fa7b344c5906679873a023b41b6a14029 100644
--- a/java/res/values/keyboard-icons-white.xml
+++ b/java/res/values/keyboard-icons-white.xml
@@ -34,9 +34,5 @@
         <!-- LatinKeyboard icons -->
         <item name="autoCorrectionSpacebarLedIcon">@drawable/sym_keyboard_space_led</item>
         <item name="disabledShortcutIcon">@drawable/sym_keyboard_voice_off_holo</item>
-        <item name="spacebarArrowLeftIcon">@drawable/sym_keyboard_language_arrows_left</item>
-        <item name="spacebarArrowRightIcon">@drawable/sym_keyboard_language_arrows_right</item>
-        <item name="spacebarArrowPreviewLeftIcon">@drawable/sym_keyboard_feedback_language_arrows_left</item>
-        <item name="spacebarArrowPreviewRightIcon">@drawable/sym_keyboard_feedback_language_arrows_right</item>
     </style>
 </resources>
diff --git a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
index 1966d2d65826a96ac9fd69444b7871c733b94f6b..9d58f69ff5068b05fb35798fdc490467c5eb7235 100644
--- a/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
+++ b/java/src/com/android/inputmethod/keyboard/LatinKeyboard.java
@@ -23,9 +23,6 @@ import android.content.res.TypedArray;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
-import android.graphics.ColorFilter;
-import android.graphics.ColorMatrix;
-import android.graphics.ColorMatrixColorFilter;
 import android.graphics.Paint;
 import android.graphics.Paint.Align;
 import android.graphics.PorterDuff;
@@ -61,8 +58,6 @@ public class LatinKeyboard extends Keyboard {
     private final int mSpaceKeyIndex;
     private final boolean mAutoCorrectionSpacebarLedEnabled;
     private final Drawable mAutoCorrectionSpacebarLedIcon;
-    private final Drawable mSpacebarArrowLeftIcon;
-    private final Drawable mSpacebarArrowRightIcon;
     private final int mSpacebarTextColor;
     private final int mSpacebarTextShadowColor;
     private float mSpacebarTextFadeFactor = 0.0f;
@@ -77,6 +72,11 @@ public class LatinKeyboard extends Keyboard {
     private final Drawable mEnabledShortcutIcon;
     private final Drawable mDisabledShortcutIcon;
 
+    // BLACK LEFT-POINTING TRIANGLE and two spaces.
+    public static final String ARROW_LEFT = "\u25C0  ";
+    // Two spaces and BLACK RIGHT-POINTING TRIANGLE.
+    public static final String ARROW_RIGHT = "  \u25B6";
+
     // Minimum width of spacebar dragging to trigger the language switch (represented by the number
     // of the most common key width of this keyboard).
     private static final int SPACEBAR_DRAG_WIDTH = 3;
@@ -131,10 +131,6 @@ public class LatinKeyboard extends Keyboard {
         mSpacebarTextColor = a.getColor(R.styleable.LatinKeyboard_spacebarTextColor, 0);
         mSpacebarTextShadowColor = a.getColor(
                 R.styleable.LatinKeyboard_spacebarTextShadowColor, 0);
-        mSpacebarArrowLeftIcon = a.getDrawable(
-                R.styleable.LatinKeyboard_spacebarArrowLeftIcon);
-        mSpacebarArrowRightIcon = a.getDrawable(
-                R.styleable.LatinKeyboard_spacebarArrowRightIcon);
         a.recycle();
 
         // The threshold is "key width" x 1.25
@@ -165,12 +161,6 @@ public class LatinKeyboard extends Keyboard {
         return newColor;
     }
 
-    private static ColorFilter getSpacebarDrawableFilter(float fadeFactor) {
-        final ColorMatrix colorMatrix = new ColorMatrix();
-        colorMatrix.setScale(1, 1, 1, fadeFactor);
-        return new ColorMatrixColorFilter(colorMatrix);
-    }
-
     public void updateShortcutKey(boolean available, LatinKeyboardView view) {
         if (mShortcutKey == null)
             return;
@@ -214,59 +204,40 @@ public class LatinKeyboard extends Keyboard {
     }
 
     // Layout local language name and left and right arrow on spacebar.
-    private static String layoutSpacebar(Paint paint, Locale locale, Drawable icon, Drawable lArrow,
-            Drawable rArrow, int width, int height, float origTextSize) {
-        final float arrowWidth;
-        if (lArrow != null && rArrow != null) {
-            arrowWidth = lArrow.getIntrinsicWidth();
-        } else {
-            arrowWidth = 0;
-        }
-        final float maxTextWidth = width - (arrowWidth + arrowWidth);
+    private static String layoutSpacebar(Paint paint, Locale locale, int width,
+            float origTextSize) {
         final Rect bounds = new Rect();
 
         // Estimate appropriate language name text size to fit in maxTextWidth.
-        String language = SubtypeSwitcher.getFullDisplayName(locale, true);
+        String language = ARROW_LEFT + SubtypeSwitcher.getFullDisplayName(locale, true)
+                + ARROW_RIGHT;
         int textWidth = getTextWidth(paint, language, origTextSize, bounds);
         // Assuming text width and text size are proportional to each other.
-        float textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
+        float textSize = origTextSize * Math.min(width / textWidth, 1.0f);
         // allow variable text size
         textWidth = getTextWidth(paint, language, textSize, bounds);
         // If text size goes too small or text does not fit, use middle or short name
         final boolean useMiddleName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
-                || (textWidth > maxTextWidth);
+                || (textWidth > width);
 
         final boolean useShortName;
         if (useMiddleName) {
-            language = SubtypeSwitcher.getMiddleDisplayLanguage(locale);
+            language = ARROW_LEFT + SubtypeSwitcher.getMiddleDisplayLanguage(locale) + ARROW_RIGHT;
             textWidth = getTextWidth(paint, language, origTextSize, bounds);
-            textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
+            textSize = origTextSize * Math.min(width / textWidth, 1.0f);
             useShortName = (textSize / origTextSize < MINIMUM_SCALE_OF_LANGUAGE_NAME)
-                    || (textWidth > maxTextWidth);
+                    || (textWidth > width);
         } else {
             useShortName = false;
         }
 
         if (useShortName) {
-            language = SubtypeSwitcher.getShortDisplayLanguage(locale);
+            language = ARROW_LEFT + SubtypeSwitcher.getShortDisplayLanguage(locale) + ARROW_RIGHT;
             textWidth = getTextWidth(paint, language, origTextSize, bounds);
-            textSize = origTextSize * Math.min(maxTextWidth / textWidth, 1.0f);
+            textSize = origTextSize * Math.min(width / textWidth, 1.0f);
         }
         paint.setTextSize(textSize);
 
-        // Place left and right arrow just before and after language text.
-        if (lArrow != null && rArrow != null) {
-            final float textHeight = -paint.ascent() + paint.descent();
-            final float baseline = (icon != null) ? height * SPACEBAR_LANGUAGE_BASELINE
-                    : height / 2 + textHeight / 2;
-            final int arrowHeight = lArrow.getIntrinsicHeight();
-            final int top = (int)(baseline - arrowHeight);
-            final float remains = (width - textWidth) / 2;
-            lArrow.setBounds((int)(remains - arrowWidth), top, (int)remains, (int)baseline);
-            rArrow.setBounds((int)(remains + textWidth), top,
-                    (int)(remains + textWidth + arrowWidth), (int)baseline);
-        }
-
         return language;
     }
 
@@ -311,9 +282,8 @@ public class LatinKeyboard extends Keyboard {
                 defaultTextSize = 14;
             }
 
-            final String language = layoutSpacebar(paint, inputLocale, mSpaceIcon,
-                    mSpacebarArrowLeftIcon, mSpacebarArrowRightIcon, width, height,
-                    getTextSizeFromTheme(mTheme, textStyle, defaultTextSize));
+            final String language = layoutSpacebar(paint, inputLocale, width, getTextSizeFromTheme(
+                    mTheme, textStyle, defaultTextSize));
 
             // Draw language text with shadow
             // In case there is no space icon, we will place the language text at the center of
@@ -326,19 +296,6 @@ public class LatinKeyboard extends Keyboard {
             canvas.drawText(language, width / 2, baseline - descent - 1, paint);
             paint.setColor(getSpacebarTextColor(mSpacebarTextColor, textFadeFactor));
             canvas.drawText(language, width / 2, baseline - descent, paint);
-
-            // Put arrows that are already laid out on either side of the text
-            // Because language switch is disabled on phone and number layouts, hide arrows.
-            // TODO: Sort out how to enable language switch on these layouts.
-            if (mSpacebarArrowLeftIcon != null && mSpacebarArrowRightIcon != null
-                    && mSubtypeSwitcher.useSpacebarLanguageSwitcher()
-                    && mSubtypeSwitcher.getEnabledKeyboardLocaleCount() > 1
-                    && !(isPhoneKeyboard() || isNumberKeyboard())) {
-                mSpacebarArrowLeftIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor));
-                mSpacebarArrowRightIcon.setColorFilter(getSpacebarDrawableFilter(textFadeFactor));
-                mSpacebarArrowLeftIcon.draw(canvas);
-                mSpacebarArrowRightIcon.draw(canvas);
-            }
         }
 
         // Draw the spacebar icon at the bottom
diff --git a/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java b/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
index 78a3a7e9d6b6a3ba71b712154ef209036c249087..ef3ea4c1252099d57c1c420662797c4ccae0899c 100644
--- a/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
+++ b/java/src/com/android/inputmethod/keyboard/internal/SlidingLocaleDrawable.java
@@ -46,8 +46,7 @@ public class SlidingLocaleDrawable extends Drawable {
     private final int mSpacebarTextColor;
     private final TextPaint mTextPaint;
     private final int mMiddleX;
-    private final Drawable mLeftDrawable;
-    private final Drawable mRightDrawable;
+    private final boolean mDrawArrows;
     private final int mThreshold;
 
     private int mDiff;
@@ -65,20 +64,18 @@ public class SlidingLocaleDrawable extends Drawable {
         textPaint.setTextSize(LatinKeyboard.getTextSizeFromTheme(
                 context.getTheme(), android.R.style.TextAppearance_Medium, 18));
         textPaint.setColor(Color.TRANSPARENT);
-        textPaint.setTextAlign(Align.CENTER);
         textPaint.setAntiAlias(true);
         mTextPaint = textPaint;
         mMiddleX = (background != null) ? (mWidth - mBackground.getIntrinsicWidth()) / 2 : 0;
 
-        final TypedArray lka = context.obtainStyledAttributes(
-                null, R.styleable.LatinKeyboard, R.attr.latinKeyboardStyle, R.style.LatinKeyboard);
-        mLeftDrawable = lka.getDrawable(R.styleable.LatinKeyboard_spacebarArrowPreviewLeftIcon);
-        mRightDrawable = lka.getDrawable(R.styleable.LatinKeyboard_spacebarArrowPreviewRightIcon);
-        lka.recycle();
-        final TypedArray kva = context.obtainStyledAttributes(
+        final TypedArray a = context.obtainStyledAttributes(
                 null, R.styleable.KeyboardView, R.attr.keyboardViewStyle, R.style.KeyboardView);
-        mSpacebarTextColor = kva.getColor(R.styleable.KeyboardView_keyPreviewTextColor, 0);
-        kva.recycle();
+        mSpacebarTextColor = a.getColor(R.styleable.KeyboardView_keyPreviewTextColor, 0);
+        final int spacebarPreviewBackrgound = a.getResourceId(
+                R.styleable.KeyboardView_keyPreviewSpacebarBackground, 0);
+        // If spacebar preview background is transparent, we need not draw arrows.
+        mDrawArrows = (spacebarPreviewBackrgound != R.drawable.transparent);
+        a.recycle();
 
         mThreshold = ViewConfiguration.get(context).getScaledTouchSlop();
     }
@@ -105,8 +102,6 @@ public class SlidingLocaleDrawable extends Drawable {
             final int width = mWidth;
             final int height = mHeight;
             final int diff = mDiff;
-            final Drawable lArrow = mLeftDrawable;
-            final Drawable rArrow = mRightDrawable;
             canvas.clipRect(0, 0, width, height);
             if (mCurrentLanguage == null) {
                 SubtypeSwitcher subtypeSwitcher = SubtypeSwitcher.getInstance();
@@ -114,20 +109,19 @@ public class SlidingLocaleDrawable extends Drawable {
                 mNextLanguage = subtypeSwitcher.getNextInputLanguageName();
                 mPrevLanguage = subtypeSwitcher.getPreviousInputLanguageName();
             }
-            // Draw language text with shadow
+            // Draw language text.
             final float baseline = mHeight * LatinKeyboard.SPACEBAR_LANGUAGE_BASELINE
                     - paint.descent();
             paint.setColor(mSpacebarTextColor);
+            paint.setTextAlign(Align.CENTER);
             canvas.drawText(mCurrentLanguage, width / 2 + diff, baseline, paint);
             canvas.drawText(mNextLanguage, diff - width / 2, baseline, paint);
             canvas.drawText(mPrevLanguage, diff + width + width / 2, baseline, paint);
-
-            if (lArrow != null && rArrow != null) {
-                Keyboard.setDefaultBounds(lArrow);
-                rArrow.setBounds(width - rArrow.getIntrinsicWidth(), 0, width,
-                        rArrow.getIntrinsicHeight());
-                lArrow.draw(canvas);
-                rArrow.draw(canvas);
+            if (mDrawArrows) {
+                paint.setTextAlign(Align.LEFT);
+                canvas.drawText(LatinKeyboard.ARROW_LEFT, 0, baseline, paint);
+                paint.setTextAlign(Align.RIGHT);
+                canvas.drawText(LatinKeyboard.ARROW_RIGHT, width, baseline, paint);
             }
         }
         if (mBackground != null) {