如何在Android设备中安装自定义字体

15

我想在我的Android设备上安装一个.ttf文件的自定义字体,当我的应用程序启动时。实际上,当我运行我的应用程序时,我需要在我的Android设备上安装缅甸字体。这是否可能?如果是,那么怎么做呢?我不需要字体风格,我想要安装在系统中。

4个回答

21

请参考@CommonsWare在这里提供的答案。您无法向现有设备添加字体,除非作为自定义固件构建的一部分或通过对设备进行root来实现。

但您可以在您的应用程序中添加字体,例如:

 TextView txtvw=(TextView)findViewById(R.id.textviewname);

 Typeface typface=Typeface.createFromAsset(getAssets(),"fonts/burmese.ttf");

  txtvw.setTypeface(typface);

注意: 将字体放在项目的assets/fonts目录中。

或者,如果您的设备已 ROOT,则可以查看这个教程来安装自定义字体到 Android 设备中


+1 如果您快速回复。感谢您的回复,我看到了这个链接以及其他链接,如http://www.android-devs.com/?p=33 http://www.androidzoom.com/android_applications/productivity/gurmukhi-keyboard_rppe.html 但是否所有设备都可以root呢? - kalpana c
@khushi:这个应用程序可以在所有未root的设备上安装字体吗? - ρяσѕρєя K
可能应该另外提一个问题,但如果几个片段/等执行相同的“createFromAsset”代码,它是否会智能地访问字体缓存,还是每次都创建另一个实例?也就是说,我需要在整个应用程序中进行管理,并仅使用一个实例来节省内存吗? - peterk
你好,我使用的是安卓6.0的LG G4手机,我想在Word中添加新字体。我的手机没有被root。我该怎么做呢?我不理解上面的代码以及如何应用它... - user8176352

4

您需要处于设备的根目录。

为此,您可以使用此应用程序EasyRoot.apk。

下载并安装ES文件浏览器(https://market.android.com/details?id=com.estrongs.android.pop)。

之后,您需要启用root浏览器。更多信息可以从此链接获得。

http://chetangole.com/blog/2011/08/enabling-installing-hindi-marathi-unicode-fonts-on-android-mobile/

将字体保存在设备的/system/font文件夹中。

更多信息可以从此链接获得。

http://chetangole.com/blog/2011/08/enabling-installing-hindi-marathi-unicode-fonts-on-android-mobile/


3
如果您有自定义字体,则使用以下代码:
TextView tv=(TextView)findViewById(R.id.custom);
Typeface face=Typeface.createFromAsset(getAssets(),"fonts/Verdana.ttf");
tv.setTypeface(face);

同时将字体放置在assets/fonts文件夹中


嗨,我不想使用字体。我想要在系统中安装它。 - kalpana c

0
我为我的项目创建了一个FontWrapper类。
public static Typeface getTypeface(Context c, Fonts name) {

        synchronized (typefaces) {

            if (!typefaces.containsKey(name)) {

                try {
                    String fontPath = getFontsPath(name);

                    if (!StringUtil.isNullOrEmpty(fontPath)) {
                        InputStream inputStream = c.getAssets().open(fontPath);
                        File file = createFileFromInputStream(inputStream);
                        if (file == null) {
                            return Typeface.DEFAULT;
                        }
                        Typeface t = Typeface.createFromFile(file);
                        typefaces.put(name, t);
                    } else {
                        return Typeface.DEFAULT;
                    }

                } catch (Throwable e) {
                    e.printStackTrace();
                    return Typeface.DEFAULT;
                }
            }
            return typefaces.get(name);
        }
    }

private static File createFileFromInputStream(InputStream inputStream) {

        try {
            File f = File.createTempFile("font", null);
            OutputStream outputStream = new FileOutputStream(f);
            byte buffer[] = new byte[1024];
            int length = 0;

            while ((length = inputStream.read(buffer)) > 0) {
                outputStream.write(buffer, 0, length);
            }

            outputStream.close();
            inputStream.close();
            return f;
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }

从Android O开始,您可以直接在XML中指定字体:https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html - Harsh
这个问题是在询问系统字体,而不是使用字体。 - Suragch

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