有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

代码

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();
    }
});

我可以更改字体,但当我重新启动活动时,它会返回到原始的正常字体。。。问题是因为这一行mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);

我需要将TypeFace.NORMAL设置为Default_Font1,但不接受。。。我该怎么办


共 (3) 个答案

  1. # 1 楼答案

    I need to set the textview to Default_Font1 But not accepting... what should I do?

    根据从SharedPreferences得到的值,需要在buttonsetTypeface

    示例代码

    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();
     }
     });
    
  2. # 2 楼答案

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

    这种逻辑是完全错误的,请记住,您正在首选项(0、1、2、3)中保存int值,但首先要将其加载为默认值为“normal”的字符串

    在第二行,你设置了按钮的字体,但是从同一个按钮中选择了当前的字体,那么你得到了什么呢?没有变化

    相反,我建议这样做:

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

    然后像这样保存偏好:

    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();
    

    }

    注意,我的代码可能有点错误,因为我确实是从内存中编写的,并且没有检查它是否真的很好

  3. # 3 楼答案

    试试这个

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

    然后将其用作普通共享优先权