【问题标题】:Typeface causes for "Unfortunately (app name) hast stopped"“不幸的是(应用程序名称)已停止”的字体原因
【发布时间】:2015-04-02 19:57:17
【问题描述】:

BaseGameActivity.java 我有很容易创建字体的方法。但不幸的是,在创建字体时,该应用程序以某种方式停止了。代码不包含语法错误。

BaseGameActivity.java

public class BaseGameActivity extends Activity {

    private Map<String,Typeface> typefaces = new HashMap<String,Typeface>();

    protected void addTypeface(String name) {
        Typeface typeface = Typeface.createFromAsset(getAssets(), name+".tff");
        typefaces.put(name, typeface);
    }

    protected void setTypeface(TextView v, String typefaceName) {
        Typeface t = typefaces.get(typefaceName);
        if(t != null) {
            v.setTypeface(t);
        }
    }
}

MainAcitivity.java

public class MainActivity extends BaseGameActivity {

    private static final String FONTNAME = "airmole";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        addTypeface(FONTNAME);
        setTypeface((TextView) findViewById(R.id.title), FONTNAME);
    }
}

文件airmole.tff 位于assets 文件夹中。

日志猫

Caused by: java.lang.RuntimeException: native typeface cannot be made
        at android.graphics.Typeface.<init>(Typeface.java:319)
        at android.graphics.Typeface.createFromAsset(Typeface.java:293)
        at de.ucarweb.tools.BaseGameActivity.addTypeface(BaseGameActivity.java:23)
        at de.ucarweb.silverball.MainActivity.onCreate(MainActivity.java:28)
        at android.app.Activity.performCreate(Activity.java:5372)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1104)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2257)

            

at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2349)
            at android.app.ActivityThread.access$700(ActivityThread.java:159)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1316)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5419)
            at java.lang.reflect.Method.invokeNative(Native Method)

【问题讨论】:

  • logcat 崩溃时会说什么?
  • 查看thisthis
  • 在链接中,有一些建议,但没有一个有效。到底是哪里出了问题。
  • 这只是两个链接,它们立即出现了相同的错误。还有几个。你确定getAssets() 有效吗?尝试将您的 Typeface 代码移动到主要活动,而不是进行方法调用,只是看看它的行为是否有任何不同。

标签: java android typeface android-fonts


【解决方案1】:

通常你应该这样做:

Typeface typeface = Typeface.createFromAsset(getContext().getAssets(), name+".tff");

【讨论】:

  • 这与问题中的内容有何不同?它添加了 getContext() 但代码位于已经是上下文的 Activity 中。这没有回答问题。
  • 多亏了该解决方案,一些案例得以解决。您可以在此处查看示例:[有关 getAssets() 的其他案例][1] 或者您可以在此处记录文档:[文档][2] [1]:stackoverflow.com/questions/18436703/… [2]:developer.android.com/reference/android/app/…
  • 第一个链接是关于 getAssets() 在 View 上不可用,第二个链接是 Dialog 的 api 文档的链接。此处均不适用,发布的代码位于 Activity
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-05-18
  • 2014-10-30
  • 1970-01-01
  • 2013-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多