2016-12-07 72 views
1

NativeScript支持使用打包在應用程序的app/fonts目錄中的自定義字體。一個是用CSS font-family規則來引用它們。我需要能夠在運行時使用從網站加載的自定義字體。從NativeScript中的URL加載自定義字體

在原生Android中,可以直接從Web地址加載字體(只需打開輸入流到URL並將其提供給Typeface構造函數)即可。在iOS中,也有可能(根據this thread)。是否有任何支持在NS中執行類似的操作(使用從網頁加載的自定義字體),而不是將其放入本機代碼中?

回答

3

這在NativeScript中實際上很簡單;然而,如果你不想複製任何代碼,那麼就有一個問題。您必須將字體放在/ app/fonts文件夾中,即使是您下載的字體。

你的步驟是:

  1. 下載字體到/app/fonts/文件夾,您可以使用任何有效的方法來下載/他們。
    不幸的是,字體註冊系統在字體文件夾中查找任何自定義字體;所以除非你想在你自己的代碼庫中「複製」註冊碼;只需將新字體放入/app/fonts/文件夾即可。
  2. 註冊的字體IOS:

if (!global.android) { var fonts = require('ui/styling/fonts'); fonts.ios.registerFont('MyFont.ttf'); // or .otf }

  • 分配MyFont直接到該項目的樣式屬性; (即SomeLabel.style.fontFamily = "MyFont";
  • 分配字體家庭爲CSS值;然後CSS Page.addCss('MyCoolFont { font-family: myFont; }");分配給SomeLabel.cssClass = 'myCoolFont';
  • +0

    我想我也堅持Android開發模式,在應用程序的資源是隻讀的。我甚至沒有想到簡單地將字體文件放入'app/fonts'中。謝謝! –

    +0

    爲了將來打樣,測試'if(global.ios)'而不是'if(!global.android)'會更好嗎? –

    +0

    是的,我在一年前向NS團隊提出了一個建議,在ios引擎中發佈'global.ios',但他們不同意我的觀點。我仍然認爲他們錯了。 :-)你可以在Android上使用'global.android' ...其他平臺沒有方便的方法。你可以'require'('platforms')'並檢測它,或者你可以使用如下方法:if(typeof NSString!=='undefined'&& typeof NSObject!=='undefined')// on ios' – Nathanael