Android PhoneGap中的自定义字体

21

我尝试为我的应用程序制作自定义字体。 为此,我在我的HTML文件中编写了以下代码:

<style type="text/css" media="screen">
        @font-face {
            font-family: centurySchoolbook;
            src: url(/fonts/arial.ttf);
        }
       body {
           font-family: centurySchoolbook;
           font-size:30px;
       }
</style>
在我的HTML页面中:
<body onload="init();">
<h>Custom Fonts</h>
    <div>This is for sample</div>

</body>

但是,这些样式并没有应用到我的HTML页面...

有什么帮助来解决这个问题吗..??


你忘记在URL周围加上引号了。当你添加它们时,它是否有效? - Klaasvaak
我认为Klaasvaak的意思是你在CSS代码中键入了src: url(/fonts/arial.ttf);(没有双引号")。难道不应该是src: url("/fonts/arial.ttf");吗?你能否使用这个修改测试你的代码? - Littm
我也尝试过这样做,但输出结果仍然相同。 - user1357696
事实上,您可以尝试将CSS代码放入css文件中而不是HTML中。我不知道为什么,但似乎直接将CSS放在HTML中会导致它无法工作:S... - Littm
8个回答

32

经过以下步骤,我成功解决了问题:

-将你的CSS代码放入一个文件中,例如my_css.css

@font-face {
    font-family: "customfont";
    src: url("./fonts/arial.ttf") format("opentype");   
        /* Make sure you defined the correct path, which is related to
            the location of your file `my_css.css` */ 
    }
    body {
        font-family: "customfont";
        font-size:30px;
    }

在HTML中引用你的CSS文件my_css.css:

<link rel="stylesheet" href="./path_to_your_css/my_css.css" />


注意路径的定义!

例如,假设你有以下目录结构:

  • www

    • your_html.html

    • css

      • my_css.css
    • fonts

      • arial.ttf

那么你就应该有:

@font-face {
    font-family: "customfont";
    src: url("../fonts/arial.ttf") format("opentype");   
        /* Make sure you defined the correct path, which is related to
            the location of your file `my_css.css` */ 
    }
    body {
        font-family: "customfont";
        font-size:30px;
    }

并且:

<link rel="stylesheet" href="./css/my_css.css" />


注意:如果你使用jQuery Mobile,该解决方案可能无法正常工作(jQuery Mobile会“干扰”CSS...)。

因此,您可以尝试使用style属性来强制应用您的样式。

例如:

<body>
    <h>Custom Fonts</h>
    <div style="font-family: 'customfont';">This is for sample</div>
</body>

其中一个缺点是似乎不能在body上应用style...

因此,如果您想将字体应用于整个页面,可以尝试类似以下的方法:

<body>

    <!-- ADD ADDITIONAL DIV WHICH WILL IMPOSE STYLE -->
    <div style="font-family: 'customfont';">

        <h>Custom Fonts</h>
        <div >This is for sample</div>

    </div>

</body>
希望这也对你有用。请告诉我你的结果。

3
谢谢您的留言,我尝试了正确路径,但仍然没有改变。 - user1357696
@Littm 我在iOS中使用了你的代码,但它没有起作用。请帮我解决一下。 - ChenSmile
@Immi:嗨,伙计!你的字体文件格式是什么?是TTF吗?此外,你是在设备上还是只在模拟器上尝试了你的应用程序? - Littm
@Littm spinwerad.ttf。我在模拟器上尝试了一下...请帮帮我..我的需求是显示字体样式列表。并从中选择特定的字体样式。所选择的字体样式应该被应用... - ChenSmile
@Littm,你在Unicode测试中测试过它吗?比如阿拉伯语或波斯语? 我遇到了阿拉伯文本和字体未应用的问题。 - Rez
显示剩余9条评论

2

我也遇到了同样的问题。我将我的css文件放在css文件夹中,将ttf文件放在www文件夹中,但它没有正常工作,所以我将ttf文件移动到了css文件夹中。这是我的代码:

@font-face
{
font-family: CustomArial;
src: url('arial.ttf'); 
}

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    font-family: CustomArial;
}

如果您正在使用jQuery Mobile,您需要覆盖字体设置,例如:
.ui-bar-a, .ui-bar-a input, .ui-bar-a select, .ui-bar-a textarea, .ui-bar-a button {
    font-family: CustomArial !important;
}

您需要在CSS中覆盖具有font-family: Helvetica, Arial, sans-serif;的任何jquery移动类的字体族

请将其改为:
font-family:CustomArial !important;

现在它将可以正常工作。您可以像这样尝试,也许对您有用。

2
下面的方法非常适用于在jQueryMobile和Phonegap中使用自定义字体:
@font-face {
font-family: "Lato-Reg";
src: url("../resources/Fonts/Lato-Reg.ttf") format("opentype");   
    /* Make sure you defined the correct path, which is related to
        the location of your file `my_css.css` */ 
}

 body *{
margin: 0;
-webkit-touch-callout: none;                /* prevent callout to copy image, etc when tap to hold */
-webkit-text-size-adjust: none;             /* prevent webkit from resizing text to fit */
-webkit-user-select: none;                  /* prevent copy paste, to allow, change 'none' to 'text' */

font-family: "Lato-Lig" !important;
font-weight: normal !important;

 }

我尝试过了,但不幸的是它没有起作用。当我使用Firefox或Chrome测试页面时一切正常,但在模拟器中失败了。你有什么想法吗? - Majid Abarghooei
我已经在IOS上的Xcode上测试过了。你是在尝试在Android上运行吗? - amol-c
是的,我正在尝试在安卓上实现这个,有没有什么方法可以做到呢? - Majid Abarghooei
我没有尝试过移植到安卓,你应该尝试问这个问题。 - amol-c
为什么“它像魔法一样运行良好”? - Sebastian Mach

1

我遇到了类似的问题。问题出在当字体通过外部CSS文件给出时,它所采用的路径上。 为了解决这个问题,我在index.html的正文中内联声明了字体URL。

<div>
      <style scoped>
        @font-face {
          font-family: Monotype Corsiva;
          src: url('fonts/Monotype_Corsiva.ttf') format('truetype');
        }
      </style>
</div>

在这种方式下声明字体URL后,它就可以正常工作了。

1

在这里,您可以找到谷歌字体的.ttf文件:https://github.com/w0ng/googlefontdirectory

this screenshot should help

在你的 .css 文件中。
@font-face {
 font-family: 'Open Sans';
 src: url('../font/OpenSans-Regular.ttf') format('truetype');
 font-weight: 400;
}

0

可能的问题在于 Cordova 中的默认 index.css。检查 body 元素是否定义了 "text-transform:uppercase" 的样式。

至少对我来说,这就是问题所在。如果您在应用程序中使用默认的 index.css,请从 body 元素中删除它,这可能也会对您有所帮助。

对我而言,我正在使用 Gurmukhi/Punjabi 字体,在从 index.css 中删除上述行之后,只需使用以下 CSS 定义即可轻松实现。

示例:

.demo {
   font-family: anmol
}
@font-face {
   font-family: anmol;
   src: url(../fonts/anmol.ttf);
}

0
<style type="text/css" media="screen">
    @font-face {
        font-family: 'centurySchoolbook';
        src: url('fonts/arial.ttf');
    }
   body {
       font-family: centurySchoolbook;
       font-size:30px;
   }
</style>

在字体族和 URL 上加引号对我有效,在 HTML 文件和 Android 上。

它在实体设备上运行,但在模拟器上不起作用。


0
我只是将我的ttf字体复制到目录[app-name]/css中,并在index.css中声明了字体系列。请参见附图:my edited index.css(请检查附图中标记为绿色的区域)。我还将样式“background-attachment:fixed;” “Helvetica,Arial,no-serif…”更改为“Open Sans,Open Sans Condensed,no-serif”,并删除了“text-transform:uppercase”这一行。之后,我的“Open Sans”字体就可以正常使用了。
当然,我还包含了自己的样式表,其中包含了项目中其他样式和字体系列的声明。
我在该项目中还使用了jQuery和jQueryMobile。它们使用相同的字体(Open Sans),但我添加了其他可用的字体!
祝编码愉快!

我的浏览器出毛病了还是你发了三次相同的答案?!? - סטנלי גרונן
对不起,我是新来的... 我只是想在我的句子中改正一些东西,并认为它会更新,但它却复制了... 对不起 :( - Utz
我尝试了“删除最近的帖子”,但没有起作用。 - Utz
终于——我搞定了!可能是缓存问题,因为我使用了返回按钮来编辑我的第一个答案。之前无法找到编辑按钮的位置——但现在它出现了。 - Utz

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