您好,我想为我的应用程序实现不同的文本大小,我尝试了共享首选项这是我的代码
声明SharedPreferences
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));该按钮用于更改文本大小并将值保存到sharedpreferences
** 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();
}
});**我不知道我做错了什么
感谢您的宝贵时间
编辑:我忘记发布这个问题了
问题是应用程序终止后保存的值总是错误的,例如,当我单击按钮更改文本大小时,文本大小发生变化,然后我终止应用程序并重新打开它,而文本大小比预期的要大
发布于 2020-11-11 00:57:18
问题是您正在设置以像素为单位的文本大小。您需要做的是将其转换为密度像素。
为此,您可以使用此方法
public int pxToDp(float px) {
return (int) (px / Resources.getSystem().getDisplayMetrics().density);
}因此,在设置文本大小时,应该调用
float textSize = savedFields.getFloat("megethos1",12);
logos1.setTextSize(pxToDp(textSize));对于每个TextView。
https://stackoverflow.com/questions/64772376
复制相似问题