ここ数日間、これを理解しようとしてきましたが、成功していません...
私は現在アンドロイドを学んでおり、現在、学習プロジェクトとして歴史のある電卓を作成しています。すべての履歴を表示する TextView があります...電卓のフォントのように見えるデジタル フォントを使用していますが、これは数字と小数とコンマにのみ適しています。すべての演算子を強調表示し、別のフォント (現時点では Arial Narrow) で表示したい。カスタム フォントを適用する CustomTypeFaceSpan クラスを使用するフォントだけでなく、フォントの色を指定するスパン可能な文字列を使用して、これを美しく機能させることができました。
問題...書体を混在させると、行の高さに問題があるように見えるので、別のカスタム定義クラスを使用して、スパン可能なテキストの追加された各行に行の高さを適用する方法を示すこの投稿を見つけました。
public class CustomLineHeightSpan implements LineHeightSpan{
private final int height;
public CustomLineHeightSpan(int height){
this.height = height;
}
@Override
public void chooseHeight(CharSequence text, int start, int end, int spanstartv, int v, FontMetricsInt fm) {
fm.bottom += height;
fm.descent += height;
}
}
これはうまくいかないようで、その理由がわかりません。異なる書体を適用しない場合、最初の行の上にスペースがなく、行間に約 5 ピクセルのスペースがあり、期待どおりに表示されます。代替書体を適用すると、テキストの最初の行の上に約 10 ~ 15 ピクセルのスペースがあり、行間隔はほぼ同じ 10 ~ 15 ピクセルです。
書体のみでフォントサイズに違いはありません。何が欠けていますか。LineHeightSpan を実装し、chooseHeight メソッドをオーバーライドする CustomLineHeightSpan を実装しました。私はそれを次のように呼びます:
WordtoSpan.setSpan(新しい CustomLineHeightSpan(10), operatorPositions.get(ii), operatorPositions.get(ii) + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
CustomLineHeightSpan への呼び出しに何を入れても問題ないようです。何も変わらない...
私が何を見逃しているのか、誰にもわかりません...「見逃したなんて信じられない」という答えだと思いますが、現時点では理解できないようです。
助けてくれてありがとう:-)