2017-10-04 167 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