【问题标题】:android eclipse using string resource for text size in layoutsandroid eclipse在布局中使用字符串资源来获取文本大小
【发布时间】:2012-04-14 02:15:05
【问题描述】:

我希望能够将字体大小 (18sp) 存储在资源中,以便我的很多布局都可以使用,以便将来我可以在需要时轻松更改大小。我在字符串资源文件中有一个字符串,其值为“18sp”,我可以通过将文本大小设置为“@strings/string_name”在布局编辑器中调用它。那时一切都很好,文本被更改为正确的字体。问题是一旦我尝试在我得到的实际设备上测试它:

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 个值来更改所有内容?

还要注意:在我尝试使用字符串资源作为文本大小之前,我的应用运行良好,所以我相对确定它不可能是导致错误的无关内容。

谢谢!

【问题讨论】:

    标签: android eclipse resources text-size


    【解决方案1】:

    在你的 res 目录中创建一个 dimens.xml 文件,其内容类似于:

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

    然后,不要像 @string/blah 那样引用它,而是使用 @dimen/blah。

    【讨论】:

    • 像魅力一样工作。非常感谢!
    • 我有 4 个值文件夹,例如 values-small 、 normal 、 large 、 xlarge 。并将4个dimens.xml放入这些中。但不起作用!
    • 您能解释一下您所说的不工作是什么意思吗?我刚刚做了一个快速验证测试,values vs values-large 可以很好地从不同的 dimens.xml 文件中提取不同的值。
    【解决方案2】:

    将其用作您的 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);
    

    【讨论】:

    • 谢谢!肯定是正确答案,但之前的发帖人先回答了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    • 1970-01-01
    相关资源
    最近更新 更多