ゼブラ プリンターの印刷画面のプレビューを表示する必要があるアプリがあります。印刷するデータは純粋なテキストで、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携帯のスクリーンショットがあります
今、私のタブレットでは違うように見えます