将TextView文本大小设置为存储在SharedPreferences中的值。使用xml文件作为默认值

时间:2014-10-09 13:44:27

标签: android textview sharedpreferences android-xml

我想做一件简单的事情:从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

那么,这里发生了什么?为什么第一个输出中的值如此之高?

2 个答案:

答案 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而不是值