4

Android API 8 でTypefaceオブジェクトが使用しているファミリを確認することはできますか?

私はそのようにペイントオブジェクトに書体を作成しています

//Simplified code, the user actually selects the family and style from a list
Paint paint = new Paint();
paint.setTypeface(Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD));

私は後で家族をそのようにチェックできるようにしたいと思います

Typeface tf= paint.getTypeface();

if (tf.equals(Typeface.DEFAULT) || tf.equals(Typeface.DEFAULT_BOLD)) {
    //do something
} else if (...) {
    //do something else
} 

それらは同じオブジェクトではないため、これは機能しません。私も試しtf == valueましたが、同じ結果になりました。Typeface オブジェクトは、ファミリの検出に役立つものを公開していないようです。これに対する回避策はありますか? 基本的な Android タイプフェイス (SERIF、SANS-SERIF、DEFAULT、MONOSPACE など) を検出するだけで済みます。

4

3 に答える 3

5

なかなか。ファミリの鍵は、ソース コードnative_instance intでわかるように、パッケージ プライベートであり、直接公開されていないです。

その情報を取得するためのさまざまな厄介な方法があり、すべてのデバイスおよび Android の過去/現在/将来のすべてのバージョンで機能する場合と機能しない場合があります。

Typefaceおそらく、この情報を追跡する独自のラッパー オブジェクトを作成できます。

于 2012-11-24T15:27:25.430 に答える
1

ソースを見ると、デフォルトのものがスタイルDEFAULT(*) で作成されていることがわかります。

Typeface paintTf = paint.getTypeface();
Typeface.SERIF.equals(Typeface.create(paintTf, Typeface.DEFAULT));

仕事をするかもしれません(ここで私は家族がセリフであることを確認します)。

注意: (*) は DEFAULT_BOLD には当てはまりません。

于 2012-11-24T15:27:33.260 に答える