11

Paint/Canvas を介して画面にテキストを描画するカスタム View コンポーネントを使用するアプリケーションを使用しています。

次のコードを使用して (canvas.drawText() を呼び出す前に)、テキストを斜体にしています。

mPaintText.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC));

これは、Samsung Galaxy Nexus で動作します。しかし、Samsung Epic 4g (galaxy S)、Samsung Epic Touch (Galaxy SII)、Samsung Transform ultra では、テキストはまだイタリック体ではありません。

これらのサムスンのデバイスの一部がイタリック体のテキストをそのように設定できない理由を知っている人はいますか? TextView がある場合はどちらかを使用できるため、デバイスが斜体テキストをレンダリングできることはわかっています。

tv.setText(Html.fromHtml("<i>sometext</i>");

Javaまたは

android:textStyle="italic"

私のテキストはイタリック体で表示されます。

キャンバスの drawText() メソッドを設定して、これらのデバイスで動作する可能性のある斜体のテキストを描画する別の方法を知っている人はいますか?

編集:

これは、後でコメントで結果を試したいくつかの方法のリストです。SERIF が動作する唯一のフォントのようです。

mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC) //Nothing
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT_BOLD, Typeface.ITALIC) //Nothing
mPaint.setTypeface(Typeface.create(Typeface.SERIF, Typeface.ITALIC) //omg it is italic...But serifs look gross.
mPaint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.ITALIC) //Nothing
mPaint.setTypeface(Typeface.create(Typeface.MONOSPACE, Typeface.ITALIC) //Changes font, but still no italic.
mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.BOLD_ITALIC) //Bold but no italic

もう一度編集:この関数を作成するために、イタリック体のロボット フォントをアセット フォルダーに追加し、それをフォントとして適用しました。このように追加せずに機能させる方法を誰かが見つけたら、私はまだ興味があります。

4

4 に答える 4

2

お使いの Samsung デバイスに、目的のフォントのネイティブ イタリック バージョンがインストールされていない可能性があります。システムに斜体スタイルのフォントを合成的に作成させる必要がある場合があります。試す:

tv.setTypeface(Typeface.defaultFromStyle(Typeface.ITALIC), Typeface.ITALIC);

編集

の代わりにdefaultFromStyle、使用してみてください(ここTypeface.create (Typeface family, int style)に文書化されています)。

于 2012-05-02T19:41:14.653 に答える
1

setTypeFace適切な値が見つかるまで、APIに直接値を渡してみてください。TypeFaceイタリック体が他のメソッドを介して機能している場合は、クラス(それらのビルド)の定数定義に問題がある可能性があります。

mPaintText.setTypeface(Typeface.defaultFromStyle(0)); // then 1, 2, 3
于 2012-05-12T09:31:07.070 に答える
0

デフォルトのフォントが ITALIC モードをサポートしているかどうかを確認する必要があります。これを行うには、一時的な TextView オブジェクトを作成し、両方のモード (NORMAL と ITALIC) でその幅を測定します。幅が異なる場合は、ITALIC モードがサポートされていることを意味します。それ以外の場合、デフォルトのフォントはそれをサポートしていないため、 setTextSkewX() メソッドを使用してテキストを傾斜させる必要があります。

    mPaint.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC));

    // check whether a font supports an italic mode, returns false if it does't
    if (!supportItalicMode(this, Typeface.DEFAULT))
    {
        paint.setTextSkewX(-0.25f);
    }



private boolean supportItalicMode(Context context, Typeface typeFace)
{
    Typeface tfNormal = Typeface.create(typeFace, Typeface.NORMAL);
    Typeface tfItalic = Typeface.create(typeFace, Typeface.ITALIC);

    TextView textView = new TextView(context);
    textView.setText("Some sample text to check whether a font supports an italic mode");

    textView.setTypeface(tfNormal);
    textView.measure(0, 0);
    int normalFontStyleSize = textView.getMeasuredWidth();

    textView.setTypeface(tfItalic);
    textView.measure(0, 0);
    int italicFontStyleSize = textView.getMeasuredWidth();

    return (normalFontStyleSize != italicFontStyleSize);
}
于 2015-10-06T11:39:33.627 に答える
0

これは Samsung のバグであり、FomayGuy が言ったように、システム フォントの斜体バージョンをアセットに追加するのが最善の解決策です。

公式の Roboto Android フォントは、こちらから入手できます。

于 2013-02-19T20:14:17.573 に答える