2012-04-13 61 views
5

我希望能夠在資源中存儲字體大小(18sp),這樣我的許多佈局將使用,以便我可以輕鬆更改將來的大小我需要。我在字符串資源文件中以「18sp」作爲值的字符串,我可以在佈局編輯器中通過將文本大小設置爲「@ strings/string_name」來調用它。在那一刻,一切都很好,並且文本被更改爲正確的字體。問題是,一旦我嘗試測試實際的設備我得到:android eclipse在佈局中使用文本大小的字符串資源

04-13 12:01:01.210: E/AndroidRuntime(17114): Caused by: android.view.InflateException: Binary XML file line #50: Error inflating class <unknown> 


04-13 12:01:01.210: E/AndroidRuntime(17114): at 

android.view.LayoutInflater.createView(LayoutInflater.java:606) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.onCreateView(LayoutInflater.java:653) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:678) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.rInflate(LayoutInflater.java:742) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.inflate(LayoutInflater.java:352) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:251) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.app.Activity.setContentView(Activity.java:1835) 
04-13 12:01:01.210: E/AndroidRuntime(17114):  
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.app.Activity.performCreate(Activity.java:4465) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
04-13 12:01:01.210: E/AndroidRuntime(17114): ... 11 more 
04-13 12:01:01.210: E/AndroidRuntime(17114): Caused by: java.lang.reflect.InvocationTargetException 
04-13 12:01:01.210: E/AndroidRuntime(17114): at java.lang.reflect.Constructor.constructNative(Native Method) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.view.LayoutInflater.createView(LayoutInflater.java:586) 
04-13 12:01:01.210: E/AndroidRuntime(17114): ... 29 more 
04-13 12:01:01.210: E/AndroidRuntime(17114): Caused by: java.lang.UnsupportedOperationException: Can't convert to dimension: type=0x3 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.content.res.TypedArray.getDimensionPixelSize(TypedArray.java:463) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.widget.TextView.<init>(TextView.java:786) 
04-13 12:01:01.210: E/AndroidRuntime(17114): at android.widget.TextView.<init>(TextView.java:442) 

難道這是因爲我使用字符串資源的文字大小,或者這將是其他一些潛在的問題?如果是因爲我正在使用字符串資源,是否有不同的/更正確的方法來創建我可以調用的全局文本大小,以便通過修改1值來更改所有內容?

另請注意:在我嘗試使用字符串資源作爲文本大小之前,我的應用程序工作得很好,所以我相對確定它不能是導致錯誤的不相關的東西。

謝謝!

回答

10

用類似上述內容的創建你的資源目錄中的文件dimens.xml:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="some_text_size">18dp</dimen> 
</resources> 

然後而不是引用它像@字符串/嗒嗒的,使用@捫/等等。

+0

就像一個魅力。非常感謝! – Nick 2012-04-13 18:33:49

+0

我有4個值文件夾,如值,小,正常,大,xlarge。並把4個dimens.xml放到這些中,但不行! – 2012-10-27 13:12:21

+0

你能解釋一下你不工作的意思嗎?我只是做了一個快速的驗證測試和值vs值 - 對於從不同的dimens.xml文件中提取不同的值,大的工作正常。 – Shellum 2012-10-29 15:31:45

4

使用此爲您的XML資源,並從任何你想去的地方叫它...

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <dimen name="textview_height">25dp</dimen> 
    <dimen name="textview_width">150dp</dimen> 
    <dimen name="ball_radius">30dp</dimen> 
    <dimen name="font_size">16sp</dimen> 
</resources> 

然後在代碼中調用此:

Resources res = getResources(); 
float fontSize = res.getDimension(R.dimen.font_size); 
+0

謝謝!絕對是正確的答案,但先前的海報首先回答。 – Nick 2012-04-13 18:33:41

+1

就是這樣,謝謝! – Roman 2014-11-14 19:21:54