【问题标题】:Change font style using shared preferences使用共享首选项更改字体样式
【发布时间】:2018-07-30 06:22:02
【问题描述】:

代码

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 但不接受...我该怎么办?

【问题讨论】:

  • item 是数字。 String.valueOf(item) 仍然是那个数字。你可能想要list[item]。另外,想想这在开始时的作用:mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);

标签: java android fonts styles


【解决方案1】:

我需要将 textview 设置为 Default_Font1 但不接受...我该怎么办?

根据您从SharedPreferences 获得的值,您需要在button 中添加setTypeface

示例代码

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

【讨论】:

  • 那我该怎么办?
  • 我不认为你理解我的问题...问题不在于这部分代码...我对警报对话框没有任何问题...我的问题是这两行代码 mDefaultFont1 = mSharedPreferences1.getString("Default_Font1","Normal"); mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);
  • 因为我将按钮设置为字体,但是当我重新启动活动时,它会运行 mButton.setTypeface.Normal 的代码并将其再次设置为正常
  • @EmiliaJames 我明白你的问题看看我更新的答案
  • 嘿...它奏效了...天哪...感谢一吨老兄...你我的英雄哈哈
【解决方案2】:

试试这个。

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

然后将其用作正常的共享偏好

【讨论】:

  • 您将使用它在 sharedprefrences 中保存样式代码,然后您可以使用该样式代码从 sharedPrefrences 更改按钮样式
【解决方案3】:
mDefaultFont1 = mSharedPreferences1.getString("Default_Font1","Normal");
mButton1.setTypeface(mButton1.getTypeface(),Typeface.NORMAL);

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

在第二行中,您正在设置按钮的字体,但从同一个按钮获取当前字体,那么您得到了什么?没有变化。

取而代之的是,我建议如下:

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

}

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

【讨论】:

  • 得到这个错误 - ibb.co/jwzcm8 在行 mDefaultFont1 = mSharedPreferences1.getInt("Default_Font1",0);
  • 抱歉,保存首选项它必须是 editor1.putInt(...) 而不是 putString。我更新了我的评论。
猜你喜欢
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-17
  • 1970-01-01
相关资源
最近更新 更多