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