2014-10-18 53 views
1

这是我第一次涉足使用首选项来更改应用程序主题,并且我似乎无法使其正常工作。这里是我的代码:应用主题不随选择的偏好而改变?

MainActivity.Java onCreate方法

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     SharedPreferences getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext()); 
     String values = getPrefs.getString("list","1"); 
     if(values.contentEquals("1")){ 
      setTheme(R.style.Holo_Dark); 

     }else if(values.contentEquals("2")){ 
      setTheme(R.style.AppTheme); 

     } 

     setContentView(R.layout.activity_main); 

     mNavigationDrawerFragment = (NavigationDrawerFragment) 
       getFragmentManager().findFragmentById(R.id.navigation_drawer); 
     mTitle = getTitle(); 

     // Set up the drawer. 
     mNavigationDrawerFragment.setUp(
       R.id.navigation_drawer, 
       (DrawerLayout) findViewById(R.id.drawer_layout)); 

     TextView medEntry = (TextView)findViewById(R.id.med_name); 

     /* medEntry.setOnFocusListener(new FocusListner(){ 

     }); */ 

    } 

Prefs.Java:

public class Prefs extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState){ 



     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.prefs); 

    } 
} 

array.xml的首选项:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="list"> 

     <item>Dark</item> 
     <item>Light</item> 
    </string-array> 
    <string-array name="lValues"> 
     <item>1</item> 
     <item>2</item> 
    </string-array> 
</resources> 

styles.xml:

<resources> 

    <!-- Base application theme. --> 
    <style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar"> 
     <!-- Customize your theme here. --> 

    </style> 
    <style name="Holo_Dark" parent="android:Theme.Holo"> 

    </style> 

</resources> 

和我的清单:

<application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     > 
     <activity 
      android:name=".MainActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name=".Prefs" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.PREFS" /> 

       <category android:name="android.intent.category.DEFAULT" /> 
      </intent-filter> 
     </activity> 
    </application> 

回答

0

使用此代码的

if(values.equals("1") 

代替

if(values.contentEquals("1")) 
+0

这并没有改变结果 – 2014-10-18 07:16:35

+0

发布你提交值给编辑器的代码可能在整个应用程序的列表字符串中只有一个值,这就是为什么你看到相同的主题 – 2014-10-18 07:30:51

+0

这些值是在array.xml中看到的如上所示,这些值可以在prefs.java中看到提交@ravi sharma – 2014-10-18 07:37:01

0

提供一个字符串,可能设立一个常数,以尽量减少错别字的风险。 不要忘记取消并重新安装应用程序,如果你在首选项中搞砸了某些东西。