我正在尝试制作一个 android ESC/POS 打印机编辑器 UI。ESC/POS 在打印文本时几乎没有选项,它们可以混合在一起:小、下划线、粗体、双宽(宽)、双高(高)。虽然 ESC/POS 打印机部分没有问题,但我在尝试用 android UI 中的文本视图表示它时遇到了一些问题。
虽然“小”可以通过更改字体大小来解决,但我试图通过设置 View.setScaleX(1.5f) 和 View.setScaleY(1.5f) 来实现宽高。
我正在以编程方式创建这些视图并将它们添加到 linearLayout 容器中。
更改比例后,视图边界不会更新。宽选项超出了视野范围。我试图在 view 上使用 view.invalidate() ,它的父级认为它会重新计算边界,但它没有用。
onClick(View v) {
PrinterCommands.FormatedText textComand = new PrinterCommands.FormatedText("Hello world");
textComand.setTall(r.nextBoolean());
textComand.setUnderlined(r.nextBoolean());
textComand.setBold(r.nextBoolean());
textComand.setWide(r.nextBoolean());
textComand.setSmall(r.nextBoolean());
TextView textView = new TextView(CommandsViewActivity.this);
StringBuilder sb = new StringBuilder("Hello world");
// v.setText(String.valueOf(position));
if (textComand.isSmall()) {
sb.append(" small");
textView.setScaleX(0.5f);
textView.setScaleY(0.5f);
}
if (textComand.isBold()) {
sb.append(" bold");
textView.setTypeface(null, Typeface.BOLD);
}
if (textComand.isTall()) {
sb.append(" tall");
textView.setScaleY(1.5f);
}
if (textComand.isWide()){
sb.append(" wide");
textView.setScaleX(1.5f);
}
if (textComand.isUnderlined()) {
sb.append(" underlined");
SpannableString s = new SpannableString(sb.toString());
s.setSpan(new UnderlineSpan(), 0, s.length(), 0);
textView.setText(s);
} else textView.setText(sb.toString());
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT);
textView.setGravity(Gravity.START|Gravity.CENTER);
p.setMargins(16,16,16,16);
textView.setLayoutParams(p);
container.addView(textView);
}
});