2012-04-13 5 views
5

Ich möchte in der Lage sein, eine Schriftgröße (18sp) in einer Ressource zu speichern, so dass eine Menge meiner Layouts verwenden, so dass ich die Größe in der Zukunft leicht ändern kann Ich muss einfach. Ich habe eine Zeichenfolge in einer Zeichenfolge-Ressource-Datei mit "18sp" als Wert, und ich kann es im Layout-Editor aufrufen, indem Sie die Textgröße auf "@ strings/string_name" festlegen. An diesem Punkt ist alles in Ordnung, und der Text wird in die richtige Schriftart geändert. Das Problem ist, wenn ich versuche, dass ich auf einem Gerät zu testen erhalten:Android Eclipse mit String-Ressource für Textgröße in Layouts

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) 

Ist das, weil ich eine String-Ressource als Textgröße verwenden, oder wäre es ein anderes zugrunde liegendes Problem sein? Wenn ich eine String-Ressource verwende, gibt es eine andere/geeignetere Möglichkeit, eine globale Textgröße zu verwenden, auf die ich zugreifen kann, sodass ich alles ändern kann, indem ich einen Wert ändere?

Auch zu beachten: Meine App funktionierte gut, bevor ich versuchte, eine Zeichenfolge Ressource als Textgröße zu verwenden, so bin ich relativ sicher, dass es nicht etwas sein kann, das den Fehler verursacht.

Vielen Dank!

Antwort

10

erstellen dimens.xml Datei in Ihrem res Verzeichnis mit Inhalt wie folgt aus:

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

Dann anstatt es wie @ String/blah Referenzierung verwenden @ Dimen/bla.

+0

Arbeiten wie ein Charme. Danke vielmals! – Nick

+0

Ich habe 4 Werte Ordner wie Werte-klein, normal, groß, xlarge. und lege 4 dimens.xml hinein, aber nicht funktionieren! –

+0

Können Sie erklären, was Sie meinen, wenn Sie nicht arbeiten? Ich habe gerade einen kurzen Verifizierungstest durchgeführt und Werte gegen Werte - groß funktioniert gut, um verschiedene Werte aus verschiedenen dimens.xml-Dateien zu ziehen. – Shellum

4

Verwenden Sie diese als XML-Ressource und nennen Sie es aus, wo immer Sie wollen ...

<?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> 

Dann ist dieser in Code aufrufen:

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

Danke! Definitiv die richtige Antwort, aber das vorherige Plakat hat zuerst geantwortet. – Nick

+1

Das war's, danke! – Roman

Verwandte Themen