Текст текстового текста Android обрезается по сторонам пользовательским шрифтом

Это то, что происходит в режиме предварительного просмотра и на устройстве: Текстовая ошибка

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); } } 

Макет также очень простой, но на всякий случай:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/material_red200" android:orientation="vertical"> <*custompackage* .TestTextView android:gravity="left" android:padding="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="just some text for testing" android:textColor="@color/material_black" android:textSize="100dp" /> </LinearLayout> 

Как вы можете видеть, левые части, такие как «j» и «f», обрезаны.

Установка прокладки или поля не работала.

Этот шрифт помещается в его кадр при использовании из других программ.

Заранее спасибо.

Изменить: то, о чем упоминается @play_err_, не является решением в моем случае.

  • Я использую в окончательной версии текстовое окно, которое автоматически изменяет размер, поэтому добавление пробелов было бы ужасно трудным.
  • Мне нужно объяснение, почему другие программы (например, photoshop, after effects …) могут вычислять правильную ограничительную рамку, и андроид не может
  • Я также загружаю разные шрифты динамически, и я не хочу создавать

     if(badfont) addSpaces() 

Solutions Collecting From Web of "Текст текстового текста Android обрезается по сторонам пользовательским шрифтом"

Этот ответ привел меня к правильному пути: 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" надеюсь, что это сработает.

Что делать, если вы оберните его в другой макет и добавьте дополнение к этому? Например, что-то вроде этого:

 <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:padding="24dp"> <*custompackage* .TestTextView android:gravity="left" android:padding="0dp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="just some text for testing" android:textColor="@color/material_black" android:textSize="100dp" /> </RelativeLayout> 

Не имея вашего шрифта и других тем и т. Д. Я только что попробовал его с помощью курсорного шрифта, например, и на моей машине это выглядело бы так. Скриншот

Обновление : похоже, вы не единственный, у кого была эта проблема, а другие ответы здесь и здесь, к сожалению, связаны с добавлением лишних пробелов.

Я создал здесь биг-код, поскольку он выглядит как ошибка для меня.