Ответ 1
Вы также можете использовать символ Unicode no-break space (\ u00A0).
<TextView android:id="@+id/prodLbl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:textColor="#FFFFFF"
android:textSize="30dip"
android:textStyle="italic"
android:text="Magnifico"
/>
Кажется, клип несколько пикселей от самого правого символа, по крайней мере, на эмуляторе 480x800 или Nexus One.
Для меня это похоже на ошибку, но я просто начинающий Android. Я попытался добавить поля влево и вправо, но все еще продолжал обрезать. В конце концов, мой хак вокруг него состоял в том, чтобы добавить одно пространство по обе стороны от текста. Любые другие решения?
Вы также можете использовать символ Unicode no-break space (\ u00A0).
android:layout_width="wrap_content"
, дает вам прямоугольник для оберточного рендеринга содержимого.
Все будет хорошо работать для обычного текста (не-курсив).
После того, как вы включили текст italic
, обернутый текст попытается поместиться в прямоугольник и, следовательно, самый правый символ будет обрезаться, если его не разрезанный (например, .
, )
, 1
и т.д.)
Решение, предложенное, должно содержать пробел в конце текста (или что-нибудь лучше?)
PS: Это относится и к android:gravity="right"
, потому что текст будет нажат в крайнее правое. Если у нас есть текст italic
, мы сталкиваемся с той же проблемой.
Я добавил " \"
для завершения всех строк в файле strings.xml. \
- это escape-символ, так что я мог бы решить эту проблему, но это решение противно. Надеюсь, это поможет.
Просто добавьте дополнительное пространство в конец текста. В XML вам нужно будет добавить \u0020
в конец, иначе XML игнорирует пробелы в начале и конце по умолчанию.
Найдено еще одно решение (проверено на 4.1.2 и 4.3 при использовании wrap_content
). Если вы расширяете класс TextView
или EditText
, вы можете переопределить метод onMeasure
следующим образом:
@Override
protected void onMeasure(final int widthMeasureSpec, final int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int measuredWidth = getMeasuredWidth();
final float tenPercentOfMeasuredWidth = measuredWidth * 0.1f;
final int newWidth = measuredWidth + (int) tenPercentOfMeasuredWidth;
setMeasuredDimension(newWidth, getMeasuredHeight());
}
Вы можете добавить ПРОСТРАНСТВО ВОЛОС к вашей строке
<string name="hair_space"> </string>
String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)
Это относится и к TextViews с фиксированной шириной, а не только к "wrap_content". Я не уверен, что проблема связана с версией, о чем говорили некоторые комментаторы. Я вижу эту проблему во всех версиях сотовых телефонов. Из того, что я видел, проблема не исчезает, устанавливая маржу, прописку, используя фиксированную ширину или пользовательский шрифт с верхушкой.
Глядя на источник, я обнаружил, что установка тени расширяет прямоугольник клипа.
Трюк состоит в том, чтобы установить невидимую тень за персонажем.
Например:
android:shadowRadius="2"
android:shadowDx="2"
android:shadowColor="#00000000"
Я думаю, что это решение лучше, так как оно не расширяет ширину TextView
, которая может возникнуть при добавлении дополнительного символа (что более очевидно с фоном).
Добавьте 3Dp padding справа в TextView. Я пробовал с 1dp и 2dp, но 3dp, похоже, полностью выполнил трюк.
android:paddingRight="3dp"
Это мое решение: форматирование текстового поля и измерение. После этого заданная ширина текстового изображения с 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));
Работаю для меня. Надеюсь, что это поможет.
У меня также была такая же проблема и я использовал неразрывную космическую сущность через HTML:
textView.setText("Magnifico" + Html.fromHtml(" ");