2012-04-13 4 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> 

Тогда вместо того, чтобы ссылаться на него как @ строках/бэ, используйте @ DIMEN/ли.

+0

работает как шарм. Большое спасибо! – Nick

+0

У меня есть 4 значения папок, таких как значения-small, normal, large, xlarge. и поместите 4 dimens.xml в эти. но не работайте! –

+0

Можете ли вы объяснить, что вы имеете в виду, если не работаете? Я только что проверил быструю проверку и значения vs values-large прекрасно работает для вытягивания разных значений из разных файлов dimens.xml. – Shellum

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

+1

Вот и все, спасибо! – Roman