0

Android の WebView クラスから Web アプリケーションを作成しています。現在、自分のページにポイントすると、日本語の文字はすべて、必要な DroidSansFallback フォントでレンダリングされます。ただし、デバイスの言語が日本語に変更されると、MTLmr3m.ttf フォントで日本語の文字のレンダリングが開始され、読み込まれる Web ページのレイアウトに影響することがあります。いくつかの調査を行った後、これは fallback_fonts.xml システム ファイルからのこのコード スニペットによるものであることがわかりました。

<family>
    <fileset>
        <file lang="ja">MTLmr3m.ttf</file>
    </fileset>
</family>

おそらく、このシステム ファイルを変更することはできませんが、DroidSansFallback.ttf ファイルを直接参照し、文字列に日本語の文字が含まれている場合にフォントを設定して、デバイスが設定されている言語に関係なくこのフォントが使用されるようにする方法はありますかに?

私はshouldInterceptRequest()WebViewClient クラスから使用して、次のような css @font-face 宣言でダミーのプロトコルをキャッチしようとしました:src: url("font:Droid") format("truetype");そして、このコードを介してフォントをそのように送信します:

...
if (url.equals("font:Droid")){  
    File font = new File(Environment.getRootDirectory(),"/fonts/DroidSansFallback.ttf");
    InputStream is = new FileInputStream(font);
    String encoding="UTF-8";
    WebResourceResponse font = new WebResourceResponse("font/ttf",encoding,is);
    return font;
}
...

メソッドはリクエストをキャッチしますが、期待どおりに WebResourceResponse を返しません。

CSSで必要なフォントを何らかの形で参照できる解決策があるかもしれないと思っていました。助言がありますか?

4

1 に答える 1

0

これは答えるのが遅いに違いないことはわかっていますが、誰かにとって役立つかもしれません。

1)ルート権限を持っていないと、 Android ルート ディレクトリ " / " にアクセスできません。
2)フォントに間違った MIME タイプを使用したと思われます。この " application/x-font-ttf "を使用してください。

したがって、2 つのオプションがあります。目的のフォントをアセットに入れるか、フォントを外部ストレージにコピーします。
最初の方法を示し、他の方法はあなたに任せます。

@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url)
{
    if(url.contains("font/droid.ttf"))
    {
         return getFontFromAsset();
    }
}

private WebResourceResponse getFontFromAsset()
{       
    InputStream fontIn = null;
    try 
    {
        fontIn = yourContext.getAssets().open("DroidSansFallback.ttf");         
    } 
    catch (IOException e) 
    {
        e.printStackTrace();
    }
    if(fontIn == null)
        return null;
    else
    {           
        WebResourceResponse response = new WebResourceResponse("application/x-font-ttf", "UTF-8", fontIn);
        return response;
    }       
}

また、css に次のようなものを使用することもできます。

@font-face { font-family: 'droid'; src: url('font/droid.ttf');} body { font-family: 'droid';}

これが私にとっての作業方法です。

于 2014-08-20T03:58:55.137 に答える