Java SharedReferences不适用于setTextSize

Java SharedReferences不适用于setTextSize,java,android,Java,Android,您好,我想为我的应用程序实现不同的文本大小,我尝试了SharedReferences,这是我的代码 声明SharedReferences final SharedPreferences savedFields; savedFields = this.getSharedPreferences("stoixeiaios", 0); stoixeia.setText(savedFields.getString("stoixeiadieth",

您好,我想为我的应用程序实现不同的文本大小,我尝试了SharedReferences,这是我的代码

声明SharedReferences

final  SharedPreferences savedFields;

    savedFields = this.getSharedPreferences("stoixeiaios", 0);
    stoixeia.setText(savedFields.getString("stoixeiadieth", ""));
    stoixeia2.setText(savedFields.getString("stoixeiaonoma", ""));

    logos1.setTextSize(savedFields.getFloat("megethos1",12));
    logos2.setTextSize(savedFields.getFloat("megethos2",12));
    logos3.setTextSize(savedFields.getFloat("megethos3",12));
    logos4.setTextSize(savedFields.getFloat("megethos4",12));
    logos5.setTextSize(savedFields.getFloat("megethos5",12));
    logos6.setTextSize(savedFields.getFloat("megethos6",12));
**    button4.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                SharedPreferences.Editor preferencesEditor = savedFields.edit();
                logos1.setTextSize(TypedValue.COMPLEX_UNIT_PX,24));
                logos2.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos3.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos4.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos5.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos6.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);


                preferencesEditor.putFloat("megethos1", logos1.getTextSize());
                preferencesEditor.putFloat("megethos2", logos2.getTextSize());
                preferencesEditor.putFloat("megethos3", logos3.getTextSize());
                preferencesEditor.putFloat("megethos4", logos4.getTextSize());
                preferencesEditor.putFloat("megethos5", logos5.getTextSize());
                preferencesEditor.putFloat("megethos6", logos6.getTextSize());

                preferencesEditor.commit();
            }
        });**
更改文本大小并将值保存到SharedReferences的按钮

final  SharedPreferences savedFields;

    savedFields = this.getSharedPreferences("stoixeiaios", 0);
    stoixeia.setText(savedFields.getString("stoixeiadieth", ""));
    stoixeia2.setText(savedFields.getString("stoixeiaonoma", ""));

    logos1.setTextSize(savedFields.getFloat("megethos1",12));
    logos2.setTextSize(savedFields.getFloat("megethos2",12));
    logos3.setTextSize(savedFields.getFloat("megethos3",12));
    logos4.setTextSize(savedFields.getFloat("megethos4",12));
    logos5.setTextSize(savedFields.getFloat("megethos5",12));
    logos6.setTextSize(savedFields.getFloat("megethos6",12));
**    button4.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {
                SharedPreferences.Editor preferencesEditor = savedFields.edit();
                logos1.setTextSize(TypedValue.COMPLEX_UNIT_PX,24));
                logos2.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos3.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos4.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos5.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);
                logos6.setTextSize(TypedValue.COMPLEX_UNIT_PX,24);


                preferencesEditor.putFloat("megethos1", logos1.getTextSize());
                preferencesEditor.putFloat("megethos2", logos2.getTextSize());
                preferencesEditor.putFloat("megethos3", logos3.getTextSize());
                preferencesEditor.putFloat("megethos4", logos4.getTextSize());
                preferencesEditor.putFloat("megethos5", logos5.getTextSize());
                preferencesEditor.putFloat("megethos6", logos6.getTextSize());

                preferencesEditor.commit();
            }
        });**
我不知道我做错了什么

谢谢你抽出时间

编辑:我忘了发问题了

问题是,应用程序终止后保存的值总是错误的
例如,当我单击按钮更改文本大小时,文本大小会发生变化,然后我终止应用程序并重新打开它,并且文本大小大于它应该的大小。问题是您正在以像素为单位设置文本大小。 您需要做的是将其转换为密度像素

要做到这一点,您可以使用此方法

public int pxToDp(float px) {
    return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}
因此,当您设置文本大小时,应该调用

float textSize = savedFields.getFloat("megethos1",12);
logos1.setTextSize(pxToDp(textSize));

对于每个文本视图。

实际错误是什么?这些值没有保存吗?很抱歉,你是对的。问题是,应用程序终止后保存的值总是错误的,例如,当我单击按钮更改文本大小时,文本大小发生变化,然后我终止应用程序,重新打开它,文本大小大于预期值。如果您将默认文本大小设置为12,然后将其设置为24,那么我希望在应用程序重新打开时将值设置为24,因为它们已在
setOnClickListener()中保存为24
用于按钮。当我重新打开应用程序时,值会设置得更高,可能是30或34,而不是24,尽管编辑:我有另一个按钮将文本大小设置为10,但当我重新打开应用程序时,它会高于10,可能是15或20