字体太大,无法放入缓存

发布于 2024-11-14 05:54:02 字数 335 浏览 5 评论 0原文

所以我最近切换到 android 3.0 (honeycomb),我在硬件渲染方面遇到了一些问题,特别是在我编写的某个自定义视图中,我使用 200 的字体大小来显示一些文本。

不幸的是,鉴于我在日志中遇到的错误,openGLRenderer 似乎不太喜欢那种相当大的字体大小:

06-06 16:22:00.080: ERROR/OpenGLRenderer(2503): Font size to large to fit in cache. width, height = 97, 145

是否有解决此问题的方法(或修复它的方法),以便我可以显示文本在想要的字体大小?

So i recently switched to android 3.0 (honeycomb) and i'm having some issues with hardware rendering, specifically at a certain custom view i've written where I use a font size of 200 to display some text.

Unfortunately it seems the openGLRenderer doesn't like that kind of rather large font sizes very much, given the error i'm getting in the log:

06-06 16:22:00.080: ERROR/OpenGLRenderer(2503): Font size to large to fit in cache. width, height = 97, 145

Are there ways around this (or ways to fix it) such that I can get the text displayed at the wanted font size?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

梦年海沫深 2024-11-21 05:54:02

这确实是 Android 操作系统硬件加速模块中的一个错误。
我认为最好的方法是要求系统避免对包含大尺寸文本的 TextView 进行硬件加速。
为此,只需添加代码:

TextView bigText = (TextView) findViewById(R.id.bigtext);
bigText.setLayerType(View.LAYER_TYPE_SOFTWARE, null);

It is really a bug in the Android OS inside the Hardware Acceleration modules.
I think that the best way is to ask the system to avoid HW acceleration on TextViews that contain large size text.
To do so, just add in the code:

TextView bigText = (TextView) findViewById(R.id.bigtext);
bigText.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
月下凄凉 2024-11-21 05:54:02

只是一个想法:也许您可以使用 Paint.getTextPath(...) 并使用此路径渲染文本。这应该允许您根据需要调整路径的大小。

Just an idea: Perhaps you can convert the font to an outline using Paint.getTextPath(...) and use this path to render the text. This should allow you to resize the path as needed.

月牙弯弯 2024-11-21 05:54:02

setLayerType 方法很有用,但不幸的是,它仅支持 API >= 11。如果针对 API = 8 或更低版本进行开发,它将变得不可用。

如果可以的话,一个简单的解决方案是仅针对给您带来问题的活动禁用硬件加速。我遇到了这个问题并以这种方式解决了它:

<application
    android:...
    android:hardwareAccelerated="true" >
    <activity ...>
        ...
    </activity>

    <activity
        ...
        android:hardwareAccelerated="false">
        ...
    </activity>
</application>

此解决方案将仅针对不需要硬件加速和无法显示大文本的活动禁用硬件加速。

The setLayerType method is useful, but unfortunately it is supported just for API >= 11. Developing for API = 8 or less it will become unusable.

If you can, a simple solution is disabling the hardware acceleration just for the activity that is giving you problems. I had this very problem and solved it this way:

<application
    android:...
    android:hardwareAccelerated="true" >
    <activity ...>
        ...
    </activity>

    <activity
        ...
        android:hardwareAccelerated="false">
        ...
    </activity>
</application>

This solution will disable the hardware acceleration just for the activities where you do not need it and where you aren't able to display large texts.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文