简体   繁体   English

使用共享的首选项更改字体样式

[英]Change font style using shared preferences

Code

Button mButton1;
String mDefaultFont1;
SharedPreferences mSharedPreferences1;
SharedPreferences.Editor editor1;

 mButton1 = (Button)findViewById(R.id.buttontextfontsent);
 mSharedPreferences1 = PreferenceManager.getDefaultSharedPreferences(this);
 mDefaultFont1 = mSharedPreferences1.getString("Default_Font1","Normal");
 mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);

mButton1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {

        final String[] list = new String[]{"Normal", "Bold", "Italic", "Bold ITalic"};
        AlertDialog.Builder builder = new AlertDialog.Builder(CustomizeFont.this);
        builder.setTitle("Make your selection");
        builder.setItems(list, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                if (item==0) mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);
                if (item==1) mButton1.setTypeface(mButton1.getTypeface(),Typeface.BOLD);
                if (item==2) mButton1.setTypeface(mButton1.getTypeface(),Typeface.ITALIC);
                if (item==3) mButton1.setTypeface(mButton1.getTypeface(),Typeface.BOLD_ITALIC);
                editor1 = PreferenceManager.getDefaultSharedPreferences(CustomizeFont.this).edit();
                 editor1.putString("Default_Font1", String.valueOf(item));
                editor1.apply();

            }
        });
        builder.show();
    }
});

I can change the font but when i restart the activity it goes back to the original normal font... the problem is because of this line mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL); 我可以更改字体,但是当我重新启动活动时,它又恢复为原始的普通字体...问题是由于此行mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);

I need to set the TypeFace.NORMAL to Default_Font1 But not accepting... what should I do? 我需要将TypeFace.NORMAL设置为Default_Font1但是不接受...该怎么办?

I need to set the textview to Default_Font1 But not accepting... what should I do? 我需要将textview设置为Default_Font1,但是不接受...该怎么办?

You need to setTypeface in your button based on you values getting from SharedPreferences 您需要根据从SharedPreferences获取的值在button设置setTypeface

SAMPLE CODE 样本代码

mDefaultFont1 = mSharedPreferences1.getString("Default_Font1","0");
if (mDefaultFont1.equals("0")) {
    mButton1.setTypeface(mButton1.getTypeface(), Typeface.NORMAL);
} else if (mDefaultFont1.equals("1")) {
    mButton1.setTypeface(mButton1.getTypeface(), Typeface.BOLD);
} else if (mDefaultFont1.equals("2")) {
    mButton1.setTypeface(mButton1.getTypeface(), Typeface.ITALIC);
} else if (mDefaultFont1.equals("3")) {
    mButton1.setTypeface(mButton1.getTypeface(), Typeface.BOLD_ITALIC);
}

mButton1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

    final String[] list = new String[]{"Normal", "Bold", "Italic", "Bold ITalic"};
    AlertDialog.Builder builder = new AlertDialog.Builder(CustomizeFont.this);
    builder.setTitle("Make your selection");
    builder.setItems(list, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            if (item==0) mButton1.setTypeface(null);
            if (item==1) mButton1.setTypeface(mButton1.getTypeface(),Typeface.BOLD);
            if (item==2) mButton1.setTypeface(mButton1.getTypeface(),Typeface.ITALIC);
            if (item==3) mButton1.setTypeface(mButton1.getTypeface(),Typeface.BOLD_ITALIC);
            editor1 = PreferenceManager.getDefaultSharedPreferences(CustomizeFont.this).edit();
             editor1.putString("Default_Font1", String.valueOf(item));
            editor1.apply();

        }
    });
    builder.show();
 }
 });

try this . 尝试这个 。

editor.putInt("fontCode",mButton1.getTypeFace().getStyle());

and then use it as normal shared prefrence 然后将其用作普通共享首选项

mDefaultFont1 = mSharedPreferences1.getString("Default_Font1","Normal");
mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);

This logic is completely wrong, keep in mind that you're saving int values in preferences (0, 1, 2, 3), but first you load it as if it was string with default value "normal". 这种逻辑是完全错误的,请记住,您正在将int值保存在首选项(0、1、2、3)中,但是首先要加载它,就好像它是具有默认值“ normal”的字符串一样。

In the second line you're setting the typeface for the button, but taking current typeface from same button, so what you get? 在第二行中,您将为按钮设置字体,但是从同一按钮获取当前字体,那么您会得到什么呢? No change. 没变。

Instead of that, I suggest something like this: 相反,我建议是这样的:

mDefaultFont1 = mSharedPreferences1.getInt("Default_Font1",0);
mButton1.setTypeface(mDefaultFont1);

And save the preference like this: 并按如下方式保存首选项:

public void onClick(DialogInterface dialog, int item) {
    int defaultTypeface = 0;
    if (item==0) defaultTypeface = Typeface.NORMAL;
    if (item==1) defaultTypeface = Typeface.BOLD;
    if (item==2) defaultTypeface = Typeface.ITALIC;
    if (item==3) defaultTypeface = Typeface.BOLD_ITALIC;
    mButton1.setTypeface(defaultTypeface);
    editor1 = PreferenceManager.getDefaultSharedPreferences(CustomizeFont.this).edit();
    editor1.putInt("Default_Font1", defaultTypeface);
    editor1.apply();

} }

Note, my code might be bit wrong, since I did write it from memory and didn't check if it's really fine. 注意,我的代码可能有点错误,因为我确实是从内存中写出来的,并且没有检查它是否真的很好。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM