我想做一件简单的事情:从SharedPreferences中检索“fontSize”值并将TextView的textSize属性设置为该值:
runOnUiThread(new Runnable() {
@Override
public void run() {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(ChapterActivity.this.getBaseContext());
float fontSize = preferences.getFloat("fontSize", R.integer.defaultFontSize);
textView.setTextSize(fontSize);
Log.v("Debugging font size", "Text View font size " + textView.getTextSize());
}
});
在preferences.getFloat(key, defValue);
中我不希望defValue
硬编码,因为我在其他代码中使用该值,因此我使用xml资源文件来检索defValue
,因此我使用:
float fontSize = preferences.getFloat("fontSize", R.integer.defaultFontSize);
这些默认值的xml文件位于“values”文件夹中,这是其内容:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer name="defaultFontSize">40</integer>
</resources>
当我运行代码时,文本视图中没有文本,LogCat中的输出是
10-09 09:27:56.332: V/Debugging font size(32341): Text View font size 1.5985213E9
如果我将R.integer.defaultFontSize替换为硬编码值,例如40,则文本显示在文本视图中,我在LogCat中获得此输出:
10-09 09:39:18.072: V/Debugging font size(32509): Text View font size 30.0
那么,这里发生了什么?为什么第一个输出中的值如此之高?
答案 0 :(得分:1)
R.integer.defaultFontSize
实际上是SDK(aapt
工具)生成的常量。此常量标识您的资源,并由SDK内部使用(您不应该自己使用此ID)。
要检索资源的值,您应该使用“包装器”。
所以,而不是:
float fontSize = preferences.getFloat("fontSize", R.integer.defaultFontSize);
你应该用这个:
float fontSize = preferences.getFloat("fontSize", myContext.getResources().getInteger(R.integer.defaultFontSize));
<强>来源强>
http://developer.android.com/reference/android/content/res/Resources.html#getInteger(int)
答案 1 :(得分:0)
尝试使用
访问您的默认值float defFloat = (float) aContext.getResources().getInteger(R.integer.defaultFontSize);
使用您的代码获取资源的ID而不是值