0

ゼブラ プリンターの印刷画面のプレビューを表示する必要があるアプリがあります。印刷するデータは純粋なテキストで、1 行に最大 80 文字です。

プレビューは純粋な android です。垂直方向の線形レイアウトのテキスト ビュー、1 行に 1 つのテキスト ビュー、モノスペース フォントです。レンダリングが機能します。私の携帯電話では、フォント サイズを 7 dp に設定しており、ポートレート モードで 80 文字が画面に収まります。

では、デバイス サイズに依存せずに 1 行に正確に 80 文字に収まるようにテキスト サイズを計算する方法はありますか?

テキストサイズとテキストスケールを計算するために、次のことを試しました。

private void CalculateTextSizeAndScale(int numberOfChars, out float textSize, out float textScale)
{
    var text = new string('M', numberOfChars);
    var paint = new Paint
    {
        TextSize = 100f,
        TextScaleX = 1f
    };
    paint.SetTypeface(Typeface.Monospace);

    var width = paint.MeasureText(text);
    textSize = _screenWidth / width * 100f;

    paint.TextSize = textSize;
    paint.TextScaleX = 1f;

    width = paint.MeasureText(text);
    textScale = _screenWidth / width;
}

これは、一部の画面解像度では正しいようです。縦向きモードの Android フォンでは完全に機能しますが、横向きモードでは完全に間違っています。

Display.GetMetrics を使用して画面幅を取得します。

ここに私のAndroid携帯のスクリーンショットがあります

ポートレート電話 縦長電話

横長の電話 横向き電話

今、私のタブレットでは違うように見えます

ポートレートタブレット 縦長のタブレット

ランドスケープ タブレット 横向きのタブレット

4

0 に答える 0