安卓中的SharedPreferences颜色

4

我的应用程序有一个设置界面(settings_activity),用户可以在其中更改一些颜色(图标、文本等)。我想将这些颜色存储在sharedpreferences中,创建了一个类:

public class AppData {
    static SharedPreferences prefdata;
    static SharedPreferences.Editor editordata;

    static final String  FCOLOR_KEY = "#FFFFFF"; //first color
    static final String SCOLOR_KEY = "#FFFFFF"; //second color
    static final String TCOLOR_KEY = "#FFFFFF"; //text color
    static final String ICOLOR_KEY = "#FFFFFF"; //icon color
    static final Image BIMG_KEY = null; //bakcground image

}

颜色使用哪种值类型最好(int、string还是直接使用颜色)?

我如何通过使用settings_activity来更改appdata中的值,以及如何在xml文件中使用它(包括颜色)?我应该使用colors.xml(如何使用)吗?


你是预定义颜色,然后让用户选择一个吗?还是允许用户通过输入定义颜色?如果是前者,则只需将预定义的颜色存储在colors.xml文件中,并按其资源ID调用它们。然后,在您的共享偏好中,只需存储一些引用静态值的标识符(可以是任何内容)。您甚至可以仅存储资源ID本身,如果您愿意的话。 - NoChinDeluxe
现在是第二个问题,我还没有预定义的颜色。应用程序有默认颜色,但用户可以更改其中任何一个(我想将其保存在sharedpreferences中,这样如果用户更改了任何内容,则在应用程序重新启动时不会回到默认值)。例如,用户可以输入十六进制字符串。 - littlewombat
2个回答

1
如果你要使用颜色枚举,我建议使用int类型来存储它。(请参见下面关于int数据类型的说明)

http://developer.android.com/reference/android/graphics/Color.html

然而,如果您要使用十六进制值,则应将其存储为字符串。当您加载应用程序时,请检查共享首选项并加载字符串,如果选项不存在,则加载默认颜色。

object.setColor(sharedPreferences.getString("COLOR", "#FFFFFF"));.

非常抱歉,如果这是一个非常基础的问题,但我不确定应该将这个颜色放在哪里(了解从sharedpreferences获取COLOR,如果为null则使用默认值(#FFFFFF)。什么是“object”?我如何在xml文件中使用这个颜色? - littlewombat
你不会在XML文件中使用它。相反,我建议您将其放入需要该颜色的对象的代码中,然后使用该对象的设置颜色方法。大多数具有可选择颜色的对象(视图)都允许您为它们使用setColor方法。http://developer.android.com/reference/android/view/View.html#setBackgroundTintList(android.content.res.ColorStateList) - Alexander N.
例如,如果我想要更改LinearLayout的颜色,我应该给它一个ID,在.java文件中通过ID查找它,然后使用object.setColor?我有很多对象,所以每次应用程序启动时都必须使用setcolor对它们进行设置吗? - littlewombat
是的,那就是我会做的方式。 - Alexander N.
不是 setColor(String),而是 parseColor(String) - Prabs
显示剩余2条评论

0

如果用户给你十六进制字符串(如你回答NoChinDeluxe所示),你应该将其存储在sharePref中的字符串中,然后使用以下方式进行解析:

public static int parseColor (String colorString)

我通常这样设置我的首选项:

private static final String KEY_COLOR_1 = "color 1";

private static Prefs instance;

public static Prefs with(Context ctx) {
    if (instance == null) {
        instance = new Prefs();
    }
    instance.ctx = ctx.getApplicationContext();
    return instance;
}

private Context ctx;

private Prefs() {
}

public SharedPreferences getPrefs() {
    return PreferenceManager.getDefaultSharedPreferences(ctx);
}
public String getColor1() {
        return getPrefs().getStrings(KEY_COLOR_1, "");
    }

    public void setColor1(String color) {
        getPrefs().edit().putStrings(KEY_COLOR_1, color).apply();
    }

然后您可以通过以下方法获取颜色:

Pref.with(this).getColor1();

appdata这个类是正确的吗?你能给我一个提示如何改变sharedpreferences的值以及如何在xml文件中使用它吗? - littlewombat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接