diff --git a/java/res/layout/dictionary_line.xml b/java/res/layout/dictionary_line.xml
index a8d15ab..9eeea69 100644
--- a/java/res/layout/dictionary_line.xml
+++ b/java/res/layout/dictionary_line.xml
@@ -71,14 +71,18 @@
 
   </LinearLayout>
 
-  <Button
-      android:id="@+android:id/wordlist_button"
+  <com.android.inputmethod.dictionarypack.ButtonSwitcher
+      android:id="@+android:id/wordlist_button_switcher"
       android:layout_weight="0"
       android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:layout_gravity="right|center_vertical"
-      android:singleLine="true"
-      android:textAppearance="?android:attr/textAppearanceMedium"
-      android:text="@string/install_dict" />
-
+      android:layout_height="wrap_content">
+    <Button
+        android:id="@+android:id/dict_install_button"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="right|center_vertical"
+        android:singleLine="true"
+        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:text="@string/install_dict" />
+  </com.android.inputmethod.dictionarypack.ButtonSwitcher>
 </LinearLayout>
diff --git a/java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java b/java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java
new file mode 100644
index 0000000..a062298
--- /dev/null
+++ b/java/src/com/android/inputmethod/dictionarypack/ButtonSwitcher.java
@@ -0,0 +1,69 @@
+/**
+ * Copyright (C) 2013 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.dictionarypack;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.Button;
+import android.widget.FrameLayout;
+
+import com.android.inputmethod.latin.R;
+
+/**
+ * A view that handles buttons inside it according to a status.
+ */
+public class ButtonSwitcher extends FrameLayout {
+    // Animation directions
+    public static final int ANIMATION_IN = 1;
+    public static final int ANIMATION_OUT = 2;
+
+    public ButtonSwitcher(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    public ButtonSwitcher(Context context, AttributeSet attrs, int defStyle) {
+        super(context, attrs, defStyle);
+    }
+
+    public void setText(final CharSequence text) {
+        ((Button)findViewById(R.id.dict_install_button)).setText(text);
+    }
+
+    public void setInternalButtonVisiblility(final int visibility) {
+        findViewById(R.id.dict_install_button).setVisibility(visibility);
+    }
+
+    public void setInternalOnClickListener(final OnClickListener listener) {
+        findViewById(R.id.dict_install_button).setOnClickListener(listener);
+    }
+
+    public void animateButton(final int direction) {
+        final View button = findViewById(R.id.dict_install_button);
+        final float outerX = getWidth();
+        final float innerX = button.getX() - button.getTranslationX();
+        if (View.INVISIBLE == button.getVisibility()) {
+            button.setTranslationX(outerX - innerX);
+            button.setVisibility(View.VISIBLE);
+        }
+        if (ANIMATION_IN == direction) {
+            button.animate().translationX(0);
+        } else {
+            button.animate().translationX(outerX - innerX);
+        }
+    }
+}
diff --git a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
index 6d302da..f1c0228 100644
--- a/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
+++ b/java/src/com/android/inputmethod/dictionarypack/WordListPreference.java
@@ -23,7 +23,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.view.ViewParent;
-import android.widget.Button;
 import android.widget.ListView;
 
 import com.android.inputmethod.latin.R;
@@ -61,10 +60,6 @@
     // The status
     public int mStatus;
 
-    // Animation directions
-    static final private int ANIMATION_IN = 1;
-    static final private int ANIMATION_OUT = 2;
-
     private final DictionaryListInterfaceState mInterfaceState;
     private final OnWordListPreferenceClick mPreferenceClickHandler =
             new OnWordListPreferenceClick();
@@ -192,10 +187,12 @@
     protected void onBindView(final View view) {
         super.onBindView(view);
         ((ViewGroup)view).setLayoutTransition(null);
-        final Button button = (Button)view.findViewById(R.id.wordlist_button);
-        button.setText(getButtonLabel(mStatus));
-        button.setVisibility(mInterfaceState.isOpen(mWordlistId) ? View.VISIBLE : View.INVISIBLE);
-        button.setOnClickListener(mActionButtonClickHandler);
+        final ButtonSwitcher buttonSwitcher =
+                (ButtonSwitcher)view.findViewById(R.id.wordlist_button_switcher);
+        buttonSwitcher.setText(getButtonLabel(mStatus));
+        buttonSwitcher.setInternalButtonVisiblility(mInterfaceState.isOpen(mWordlistId) ?
+                View.VISIBLE : View.INVISIBLE);
+        buttonSwitcher.setInternalOnClickListener(mActionButtonClickHandler);
         view.setOnClickListener(mPreferenceClickHandler);
     }
 
@@ -224,32 +221,17 @@
                     listView.getLastVisiblePosition() - listView.getFirstVisiblePosition();
             // The "lastDisplayedIndex" is actually displayed, hence the <=
             for (int i = 0; i <= lastDisplayedIndex; ++i) {
-                final Button button =
-                        (Button)listView.getChildAt(i).findViewById(R.id.wordlist_button);
+                final ButtonSwitcher buttonSwitcher = (ButtonSwitcher)listView.getChildAt(i)
+                        .findViewById(R.id.wordlist_button_switcher);
                 if (i == indexToOpen) {
-                    animateButton(button, ANIMATION_IN);
+                    buttonSwitcher.animateButton(ButtonSwitcher.ANIMATION_IN);
                 } else {
-                    animateButton(button, ANIMATION_OUT);
+                    buttonSwitcher.animateButton(ButtonSwitcher.ANIMATION_OUT);
                 }
             }
         }
     }
 
-    private void animateButton(final Button button, final int direction) {
-        if (null == button) return;
-        final float outerX = ((View)button.getParent()).getWidth();
-        final float innerX = button.getX() - button.getTranslationX();
-        if (View.INVISIBLE == button.getVisibility()) {
-            button.setTranslationX(outerX - innerX);
-            button.setVisibility(View.VISIBLE);
-        }
-        if (ANIMATION_IN == direction) {
-            button.animate().translationX(0);
-        } else {
-            button.animate().translationX(outerX - innerX);
-        }
-    }
-
     private class OnActionButtonClick implements View.OnClickListener {
         @Override
         public void onClick(final View v) {
