diff --git a/java/res/layout/input_view.xml b/java/res/layout/input_view.xml
index f0a8ef9..93a0466 100644
--- a/java/res/layout/input_view.xml
+++ b/java/res/layout/input_view.xml
@@ -44,7 +44,8 @@
             android:layout_weight="1.0"
             android:layout_width="0dp"
             android:layout_height="@dimen/candidate_strip_height"
-            android:gravity="center_vertical" />
+            android:gravity="center_vertical"
+            style="?attr/candidateViewStyle" />
         <View
             android:layout_width="@dimen/candidate_strip_padding"
             android:layout_height="@dimen/candidate_strip_height"
diff --git a/java/src/com/android/inputmethod/compat/CompatUtils.java b/java/src/com/android/inputmethod/compat/CompatUtils.java
index 6e14bfa..b42633c 100644
--- a/java/src/com/android/inputmethod/compat/CompatUtils.java
+++ b/java/src/com/android/inputmethod/compat/CompatUtils.java
@@ -91,7 +91,7 @@
         return null;
     }
 
-    public static Constructor<?> getConstructor(Class<?> targetClass, Class<?>[] types) {
+    public static Constructor<?> getConstructor(Class<?> targetClass, Class<?> ... types) {
         if (targetClass == null || types == null) return null;
         try {
             return targetClass.getConstructor(types);
@@ -103,7 +103,7 @@
         return null;
     }
 
-    public static Object newInstance(Constructor<?> constructor, Object[] args) {
+    public static Object newInstance(Constructor<?> constructor, Object ... args) {
         if (constructor == null) return null;
         try {
             return constructor.newInstance(args);
diff --git a/java/src/com/android/inputmethod/compat/LinearLayoutCompatUtils.java b/java/src/com/android/inputmethod/compat/LinearLayoutCompatUtils.java
new file mode 100644
index 0000000..674cbe7
--- /dev/null
+++ b/java/src/com/android/inputmethod/compat/LinearLayoutCompatUtils.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.inputmethod.compat;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.util.Log;
+
+import java.lang.reflect.Field;
+
+public class LinearLayoutCompatUtils {
+    private static final String TAG = LinearLayoutCompatUtils.class.getSimpleName();
+
+    private static final Class<?> CLASS_R_STYLEABLE = CompatUtils.getClass(
+            "com.android.internal.R$styleable");
+    private static final Field STYLEABLE_VIEW = CompatUtils.getField(
+            CLASS_R_STYLEABLE, "View");
+    private static final Field STYLEABLE_VIEW_BACKGROUND = CompatUtils.getField(
+            CLASS_R_STYLEABLE, "View_background");
+    private static final Object VALUE_STYLEABLE_VIEW = CompatUtils.getFieldValue(
+            null, null, STYLEABLE_VIEW);
+    private static final Integer VALUE_STYLEABLE_VIEW_BACKGROUND =
+            (Integer)CompatUtils.getFieldValue(null, null, STYLEABLE_VIEW_BACKGROUND);
+
+    public static Drawable getBackgroundDrawable(Context context, AttributeSet attrs,
+            int defStyleAttr, int defStyleRes) {
+        if (!(VALUE_STYLEABLE_VIEW instanceof int[]) || VALUE_STYLEABLE_VIEW_BACKGROUND == null) {
+            Log.w(TAG, "Can't get View background attribute using reflection");
+            return null;
+        }
+
+        final int[] styleableView = (int[])VALUE_STYLEABLE_VIEW;
+        final TypedArray a = context.obtainStyledAttributes(
+                attrs, styleableView, defStyleAttr, defStyleRes);
+        final Drawable background = a.getDrawable(VALUE_STYLEABLE_VIEW_BACKGROUND);
+        a.recycle();
+        return background;
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/CandidateView.java b/java/src/com/android/inputmethod/latin/CandidateView.java
index 92d26a0..fa27ca5 100644
--- a/java/src/com/android/inputmethod/latin/CandidateView.java
+++ b/java/src/com/android/inputmethod/latin/CandidateView.java
@@ -44,6 +44,7 @@
 import android.widget.PopupWindow;
 import android.widget.TextView;
 
+import com.android.inputmethod.compat.LinearLayoutCompatUtils;
 import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo;
 
 import java.util.ArrayList;
@@ -148,7 +149,18 @@
     }
 
     public CandidateView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
+        // Note: Up to version 10 (Gingerbread) of the API, LinearLayout doesn't have 3-argument
+        // constructor.
+        // TODO: Call 3-argument constructor, super(context, attrs, defStyle), when we abandon
+        // backward compatibility with the version 10 or earlier of the API.
+        super(context, attrs);
+        if (defStyle != R.attr.candidateViewStyle) {
+            throw new IllegalArgumentException(
+                    "can't accept defStyle other than R.attr.candidayeViewStyle: defStyle="
+                    + defStyle);
+        }
+        setBackgroundDrawable(LinearLayoutCompatUtils.getBackgroundDrawable(
+                context, attrs, defStyle, R.style.CandidateViewStyle));
 
         Resources res = context.getResources();
         LayoutInflater inflater = LayoutInflater.from(context);
