diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 248cf92..4b607be 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -113,4 +113,9 @@
     <!-- Confirm device credentials screen -->
     <attr name="confirmDeviceCredentialsSideMargin" format="dimension" />
     <attr name="confirmDeviceCredentialsTopMargin" format="dimension" />
+
+    <declare-styleable name="DropDownPreference">
+        <attr name="android:entries" />
+        <attr name="android:entryValues" />
+    </declare-styleable>
 </resources>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index a24da21..fef2623 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -65,11 +65,10 @@
         android:persistent="false"
         android:title="@string/system_ui_settings" />
 
-    <ListPreference
+    <com.android.settings.DropDownPreference
         android:key="night_mode"
         android:title="@string/night_mode_title"
         android:summary="@string/night_mode_summary"
-        android:persistent="false"
         android:entries="@array/night_mode_entries"
         android:entryValues="@array/night_mode_values" />
 
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 4e9089d..0c527fa 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -265,7 +265,7 @@
 
     private SwitchPreference mShowAllANRs;
 
-    private ListPreference mNightModePreference;
+    private DropDownPreference mNightModePreference;
 
     private final ArrayList<Preference> mAllPrefs = new ArrayList<Preference>();
 
@@ -427,12 +427,26 @@
             removePreferenceForProduction(hdcpChecking);
         }
 
-        mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
+        mNightModePreference = (DropDownPreference) findPreference(KEY_NIGHT_MODE);
         final UiModeManager uiManager = (UiModeManager) getSystemService(
                 Context.UI_MODE_SERVICE);
         final int currentNightMode = uiManager.getNightMode();
-        mNightModePreference.setValue(String.valueOf(currentNightMode));
-        mNightModePreference.setOnPreferenceChangeListener(this);
+        mNightModePreference.setSelectedValue(String.valueOf(currentNightMode));
+        mNightModePreference.setCallback(new DropDownPreference.Callback() {
+            @Override
+            public boolean onItemSelected(int pos, Object newValue) {
+                try {
+                    final int value = Integer.parseInt((String) newValue);
+                    final UiModeManager uiManager = (UiModeManager) getSystemService(
+                            Context.UI_MODE_SERVICE);
+                    uiManager.setNightMode(value);
+                    return true;
+                } catch (NumberFormatException e) {
+                    Log.e(TAG, "could not persist night mode setting", e);
+                    return false;
+                }
+            }
+        });
     }
 
     private ListPreference addListPreference(String prefKey) {
@@ -1808,16 +1822,6 @@
         } else if (preference == mTunerUiPref) {
             writeTweakUi(newValue);
             return true;
-        } else if (preference == mNightModePreference) {
-            try {
-                final int value = Integer.parseInt((String) newValue);
-                final UiModeManager uiManager = (UiModeManager) getSystemService(
-                        Context.UI_MODE_SERVICE);
-                uiManager.setNightMode(value);
-            } catch (NumberFormatException e) {
-                Log.e(TAG, "could not persist night mode setting", e);
-            }
-            return true;
         }
         return false;
     }
diff --git a/src/com/android/settings/DropDownPreference.java b/src/com/android/settings/DropDownPreference.java
index 8f8ec78..89e67a5 100644
--- a/src/com/android/settings/DropDownPreference.java
+++ b/src/com/android/settings/DropDownPreference.java
@@ -17,14 +17,15 @@
 package com.android.settings;
 
 import android.content.Context;
+import android.content.res.TypedArray;
 import android.preference.Preference;
 import android.util.AttributeSet;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemSelectedListener;
 import android.widget.ArrayAdapter;
 import android.widget.Spinner;
-import android.widget.AdapterView.OnItemSelectedListener;
 
 import java.util.ArrayList;
 
@@ -69,6 +70,16 @@
                 return true;
             }
         });
+
+        // Support XML specification like ListPreferences do.
+        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.DropDownPreference);
+        CharSequence[] entries = a.getTextArray(R.styleable.DropDownPreference_android_entries);
+        CharSequence[] values = a.getTextArray(R.styleable.DropDownPreference_android_entryValues);
+        if (entries != null && values != null) {
+            for (int i= 0; i < entries.length; i++) {
+                addItem(entries[i].toString(), values[i]);
+            }
+        }
     }
 
     public void setDropDownWidth(int dimenResId) {
