Android Studio中自定义字体

3
如何在android studio中创建自定义字体? 我想使用一种自定义字体,并且已经了解到我应该将字体放置在assets/fonts文件夹中。 我已经花费了很长时间来搜索,但是还没有找到任何有用的信息。 我真的不知道该怎么办。下面是所有细节。我已经尝试过,但没有成功。 我正在使用Android Studio,但似乎没有assets文件夹。因此,我创建了一个。但是当我将assets文件夹放在/main/assets中时,我的应用程序会崩溃。我使用以下代码加载字体。
我知道Android Studio 0.5.2项目的结构如下:
root-module
|--.idea
|--app
|----build
|----src
|------main
|--------assets
|----------fonts/SomeFont.ttc
|----------fonts/AnotherFont.otf
|--------java
|----------source code here
|--------res
|------AndroidManifest.xml
|----build.gradle

更新

我的字体文件目录:E:\AndroidProjects\ReadNews\ReadNews\src\main\assets\fonts\

更新结束

我的代码:

 @Override
     protected void onPreExecute() {
            TextView titleTextView = (TextView) _dialog.findViewById(R.id.title_news_TextView);
            TextView messageTextView = (TextView) _dialog.findViewById(R.id.message_TextView);
            String fontPath = "fonts/Tahoma.ttf";
            Typeface tf = Typeface.createFromAsset(MainActivity.this.getResources().getAssets(), fontPath);
            titleTextView.setTypeface(tf);
            messageTextView.setTypeface(tf);
        }

错误:

06-27 07:40:37.985 4206-4206/com.mmd2009.readnews E/AndroidRuntime﹕ 致命错误:主进程 进程:com.mmd2009.readnews,PID:4206 java.lang.RuntimeException: 无法创建原生字体 at android.graphics.Typeface.(Typeface.java:175) at android.graphics.Typeface.createFromAsset(Typeface.java:149) at com.mmd2009.readnews.MainActivity$ReadNewsAsyncTask.onPreExecute(MainActivity.java:216) at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:587) at android.os.AsyncTask.execute(AsyncTask.java:535) at com.mmd2009.readnews.MainActivity$1.onClick(MainActivity.java:70) at android.view.View.performClick(View.java:4438) at android.view.View$PerformClick.run(View.java:18422) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method)

我的ReadNews-ReadNews.iml:

  <facet type="android" name="Android">
      <configuration>
        <option name="SELECTED_BUILD_VARIANT" value="debug" />
        <option name="ASSEMBLE_TASK_NAME" value="assembleDebug" />
        <option name="COMPILE_JAVA_TASK_NAME" value="compileDebugJava" />
        <option name="ASSEMBLE_TEST_TASK_NAME" value="assembleDebugTest" />
        <option name="SOURCE_GEN_TASK_NAME" value="generateDebugSources" />
        <option name="ALLOW_USER_CONFIGURATION" value="false" />
        <option name="MANIFEST_FILE_RELATIVE_PATH" value="/src/main/AndroidManifest.xml" />
        <option name="RES_FOLDER_RELATIVE_PATH" value="/src/main/res" />
        <option name="RES_FOLDERS_RELATIVE_PATH" value="file://$MODULE_DIR$/src/main/res" />
        <option name="ASSETS_FOLDER_RELATIVE_PATH" value="/src/main/assets" />
      </configuration>
    </facet>
2个回答

3
您的字体路径不正确。您没有font文件夹。请将您的字体路径更改为"Tahoma.ttf",或在您的资源文件夹内创建该文件夹。 编辑 这似乎是Android操作系统偶尔出现的一个bug。请查看此链接,似乎已经解决了这个问题。"Native typeface cannot be made" only for some people

我有一个字体文件夹。上面的结构只是一个示例。 - Football-Is-My-Life

1
也许您指的是不存在的字体文件。您的目录列表中没有显示fonts/Tahoma.ttf,这就是您的代码所指的。
此外,可能是Android因为某些原因不喜欢您的字体文件。尝试使用其他字体文件。

我使用不同的字体文件,但我的应用崩溃了。我的字体文件是 "arial.ttf"。 - Football-Is-My-Life
@user3763877:你的路径是fonts/Tahoma.ttf。不仅没有Tahoma.ttf文件,而且在assets/目录下也没有fonts/子目录。 - CommonsWare
我有一个字体文件夹。上面的结构只是一个例子。我的字体文件目录:E:\AndroidProjects\ReadNews\ReadNews\src\main\assets\fonts\ - Football-Is-My-Life

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接