2017-10-04 171 views
0
String abColor = sharedPreferences.getString("action_bar_color", "#ffffff"); 
String sbColor = sharedPreferences.getString("status_bar_color", "#ffffff"); 

ActionBar ab = getSupportActionBar(); 
ab.setBackgroundDrawable(new ColorDrawable(Color.parseColor(abColor))); 

Window window = getWindow(); 
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); 
window.setStatusBarColor(Color.parseColor(sbColor)); 

我一直在獲取java.lang.IllegalArgumentException:未知顏色錯誤指向變量sbColor。儘管變量abColor的使用方式與sbColor相同,但它的工作原理完全正常。java.lang.IllegalArgumentException:未知顏色

請你幫我找出爲什麼Android Studio會拋出這個錯誤。

prefs = getSharedPreferences("AppPrefs", Context.MODE_PRIVATE); 
String logged = prefs.getString("LOGGED", "OUT"); 

mRemoteConfig = FirebaseRemoteConfig.getInstance(); 
FirebaseRemoteConfigSettings remoteConfigSettings = new FirebaseRemoteConfigSettings.Builder() 
     .setDeveloperModeEnabled(true) 
     .build(); 
mRemoteConfig.setConfigSettings(remoteConfigSettings); 

HashMap<String, Object> defaults = new HashMap<>(); 

defaults.put("action_bar_color", R.color.colorPrimary); 
defaults.put("status_bar_color", R.color.colorPrimaryDark); 
mRemoteConfig.setDefaults(defaults); 

final Task<Void> fetch = mRemoteConfig.fetch(0); 
fetch.addOnSuccessListener(this, new OnSuccessListener<Void>() { 
    @Override 
    public void onSuccess(Void aVoid) { 
     mRemoteConfig.activateFetched(); 

     SharedPreferences.Editor editor = prefs.edit(); 
     editor.putString("action_bar_color", mRemoteConfig.getString("action_bar_color")); 
     editor.putString("status_bar_color", mRemoteConfig.getString("status_bar_color")); 
     editor.apply(); 
+0

打印sbColor的值,它可能不是你所期望的 – Les

+0

什麼是保存在首選項'status_bar_color'鍵? –

+0

你正在把整數,並期望讀取字符串 –

回答

0

它看起來像在這裏:defaults.put("status_bar_color", R.color.colorPrimaryDark);保存顏色爲int資源標識符,但在這裏:String sbColor = sharedPreferences.getString("status_bar_color", "#ffffff");要加載顏色的字符串表示。

因此請嘗試在defaults.put()方法中使用ContextCompat.getColor(context, R.color.colorPrimaryDark);

對於context參數,您可以通過this(如果該方法在Activity中調用)或getActivity()(如果在片段中)。

現在您必須將顏色保存在String中而不是int中。所以,做到以下幾點:

int sbColor = ContextCompat.getColor(this, R.color.colorPrimaryDark); 
// Convert to String Color 
String hexSbColor = String.format("#%06X", (0xFFFFFF & sbColor)); 
defaults.put("status_bar_color", hexSbColor); 

而且你應該做defaults一個字符串,字符串地圖:

HashMap<String, String> defaults = new HashMap<>(); 
+0

@DmitryAkshin當我將'context'放入'deafults.put'方法時,出現一個錯誤,說它無法解析符號。 – Zid

+0

@Zid編輯了答案並做了一些澄清。 –

+0

傳遞'this'不起作用。是的,這是一項活動。 – Zid