这是预览和设备上发生的事情:
TextView没什么特别的,只是加载自定义字体:public class TestTextView extends AppCompatTextView { public TestTextView(Context context) { super(context); init(context); } public TestTextView(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public TestTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); init(context); } void init(Context context) { Typeface t = Typeface.createFromAsset(context.getAssets(), "fonts/daisy.ttf"); setTypeface(t); } }
布局也很基础,但以防万一:
如您所见,左侧部分,如“j”和“f”被切断。
设置填充或边距不起作用。
从其他程序使用时,此字体适合其框架。
提前致谢。
编辑:在我的案例中,@ play_err_提到的不是解决方案。
我在最终版本中使用自动resize的textview,因此添加空格将非常困难。
我需要解释为什么其他程序(例如photoshop,后效…)可以计算出一个合适的边界框而android不能
我也动态加载不同的字体,我不想创建一个
if(badfont) addSpaces()
这个答案让我走上了正确的道路: https : //stackoverflow.com/a/28625166/4420543
因此,解决方案是创建自定义Textview并覆盖onDraw方法:
@Override protected void onDraw(Canvas canvas) { final Paint paint = getPaint(); final int color = paint.getColor(); // Draw what you have to in transparent // This has to be drawn, otherwise getting values from layout throws exceptions setTextColor(Color.TRANSPARENT); super.onDraw(canvas); // setTextColor invalidates the view and causes an endless cycle paint.setColor(color); System.out.println("Drawing text info:"); Layout layout = getLayout(); String text = getText().toString(); for (int i = 0; i < layout.getLineCount(); i++) { final int start = layout.getLineStart(i); final int end = layout.getLineEnd(i); String line = text.substring(start, end); System.out.println("Line:\t" + line); final float left = layout.getLineLeft(i); final int baseLine = layout.getLineBaseline(i); canvas.drawText(line, left + getTotalPaddingLeft(), // The text will not be clipped anymore // You can add a padding here too, faster than string string concatenation baseLine + getTotalPaddingTop(), getPaint()); } }
Android:gravity =“center”并使用Android:layout_paddingleft =“value”希望它能正常工作..
如果将其包装在另一个布局中并为其添加填充怎么办? 例如这样的事情:
没有你的字体和其他主题等我刚刚用草书字体尝试过,例如在我的机器上它看起来像这样。 截图
更新 :看起来你不是唯一一个遇到过这个问题的人,其他答案在这里和这里都不幸与添加额外的空间有关。
我在这里创建了一个错误票 ,因为它看起来像是一个bug。