2012-04-13 9 views
5

Quiero ser capaz de almacenar un tamaño de fuente (18sp) en un recurso para que muchos de mis diseños se utilicen para que pueda cambiar el tamaño fácilmente en el futuro si Necesito. Tengo una cadena en un archivo de recursos de cadena con "18sp" como valor, y puedo llamarlo en el editor de diseño estableciendo el tamaño del texto en "@ strings/string_name". En ese punto todo está bien, y el texto se cambia a la fuente correcta. El problema es que una vez que trato de probar que en un dispositivo real consigo:android eclipse utilizando recurso de cadena para el tamaño de texto en diseños

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) 

Es esto porque estoy usando un recurso de cadena como el tamaño del texto, o sería algún otro problema subyacente? Si es porque estoy usando un recurso de cadena, ¿existe una forma diferente/más adecuada de tener un tamaño de texto global al que pueda llamar para poder cambiar todo modificando 1 valor?

También para tener en cuenta: Mi aplicación funcionó bien antes de intentar usar un recurso de cadena como tamaño de texto, por lo que estoy relativamente seguro de que no puede haber algo relacionado que esté causando el error.

¡Gracias!

Respuesta

10

Crear un archivo en el directorio de dimens.xml resolución con un contenido similar a esto:

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

Entonces, en lugar de hacer referencia a ella como @ string/bla, utilice @ dimen/bla.

+0

funciona como un encanto. ¡Muchas gracias! – Nick

+0

Tengo 4 carpetas de valores como values-small, normal, large, xlarge. y pon 4 dimens.xml en estos. ¡Pero no funciona! –

+0

¿Puedes explicar a qué te refieres con no trabajar? Acabo de hacer una prueba de verificación rápida y valores vs valores grandes funciona bien para extraer diferentes valores de diferentes archivos dimens.xml. – Shellum

4

utilizar esto como su recurso XML y llamarlo desde donde quieras ...

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

luego llamar a esto en código:

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

Gracias! Definitivamente la respuesta correcta, pero el póster anterior respondió primero. – Nick

+1

¡Eso es todo, gracias! – Roman

Cuestiones relacionadas