Ответ 1
ни одно из упомянутых предложений не работает, в итоге появилось хакерское решение, которое добавляет пробел после последнего выделенного символа символа
Это скриншот из моего андроида. текст "asd". однако "d" слегка отрезан. вот соответствующий взгляд:
<TextView
android:id="@+id/stuff"
android:padding="2dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/other_stuff"
android:layout_marginTop="33dp"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="italic" />
любая идея относительно того, что вызывает это?
ни одно из упомянутых предложений не работает, в итоге появилось хакерское решение, которое добавляет пробел после последнего выделенного символа символа
Хорошо, это довольно странно, но я изменился с android:maxLines="1"
на android:singleLine="true"
, и теперь текст не обрезается.
Я установил его с установкой ширины TextView для fill_parent вместо wrap_content...
Это мое решение: Форматировать текстовое представление и измерение. После этого заданная ширина текстового изображения с 1 пикселем добавляется к измеренной ширине.
TextView textView = new TextView(this);
textView.setText("Text blah blah");
textView.setTypeface(typeface, Typeface.BOLD_ITALIC)
textView.measure(MeasureSpec.UNSPECIFIED, MeasureSpec.UNSPECIFIED);
textView.setLayoutParams(new LayoutParams(textView.getMeasuredWidth() + 1, LayoutParams.WRAP_CONTENT));
Работаю для меня. Надеюсь, что это поможет.
может быть дополнением, попробуйте установить значение 0dp
также есть что-нибудь еще в макете?
Вы можете использовать.
android:layout_width="fill_parent"
istead
android:layout_width="wrap_content"
Я подозреваю, что проблема не возникнет, если вы не используете курсивный текст. Сначала я проверил бы это, и если использование не-курсивного текста отобразит его правильно, то это будет выглядеть как проблема рендеринга, которая потребует работы с дополнительным дополнением в TextView, чтобы позволить место для курсивных букв.
проблема здесь - это курсивное свойство. Вы должны установить определенную ширину для своего текстового представления.
Вы всегда можете создать пользовательский TextView, который будет использовать, например, этот шрифт (на самом деле это проблема с курсивом):
Typeface tf = Typeface.createFromAsset(context.getAssets(), "fonts/Roboto-LightItalic.ttf");
setTypeface(tf);
Подробнее здесь.
Я столкнулся с той же проблемой, но с EditText
при использовании некоторых шрифтов. Мое решение работает также с TextView
:
Используйте прокладку
Как TextView
с использованием Canvas.clipRect(float, float, float, float)
в методе onDraw
для обрезки - создайте собственный класс Canvas
и переопределите этот метод (оставьте его пустым).
Затем создайте пользовательский TextView
и переопределите два метода onSizeChanged
и onDraw
.
В onSizeChanged
создайте растровое изображение с размером TextView
и нашим пользовательским Canvas
.
В onDraw
сначала рисуем растровое изображение, передавая наш собственный Canvas
методу super.onDraw. После этого рисуем растровое изображение на целевой канва.
Более подробно в моем ответе на подобный вопрос здесь