Подтвердить что ты не робот

Курсив TextView с wrap_contents, кажется, закрепил текст на правом краю

<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. Я попытался добавить поля влево и вправо, но все еще продолжал обрезать. В конце концов, мой хак вокруг него состоял в том, чтобы добавить одно пространство по обе стороны от текста. Любые другие решения?

4b9b3361

Ответ 1

Вы также можете использовать символ Unicode no-break space (\ u00A0).

Ответ 2

android:layout_width="wrap_content", дает вам прямоугольник для оберточного рендеринга содержимого. Все будет хорошо работать для обычного текста (не-курсив).

После того, как вы включили текст italic, обернутый текст попытается поместиться в прямоугольник и, следовательно, самый правый символ будет обрезаться, если его не разрезанный (например, ., ), 1 и т.д.)

Решение, предложенное, должно содержать пробел в конце текста (или что-нибудь лучше?)

PS: Это относится и к android:gravity="right", потому что текст будет нажат в крайнее правое. Если у нас есть текст italic, мы сталкиваемся с той же проблемой.

Ответ 3

Я добавил " \" для завершения всех строк в файле strings.xml. \ - это escape-символ, так что я мог бы решить эту проблему, но это решение противно. Надеюсь, это поможет.

Ответ 4

Просто добавьте дополнительное пространство в конец текста. В XML вам нужно будет добавить \u0020 в конец, иначе XML игнорирует пробелы в начале и конце по умолчанию.

Ответ 5

Найдено еще одно решение (проверено на 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());
}

Ответ 6

Вы можете добавить ПРОСТРАНСТВО ВОЛОС к вашей строке

<string name="hair_space">&#x200A;</string>

String hairSpace = getContext().getString(R.string.hair_space);
textView.setText(hairSpace + originalString + hairSpace)

Ответ 7

Это относится и к TextViews с фиксированной шириной, а не только к "wrap_content". Я не уверен, что проблема связана с версией, о чем говорили некоторые комментаторы. Я вижу эту проблему во всех версиях сотовых телефонов. Из того, что я видел, проблема не исчезает, устанавливая маржу, прописку, используя фиксированную ширину или пользовательский шрифт с верхушкой.

Ответ 8

Глядя на источник, я обнаружил, что установка тени расширяет прямоугольник клипа.

Трюк состоит в том, чтобы установить невидимую тень за персонажем.

Например:

android:shadowRadius="2"
android:shadowDx="2"
android:shadowColor="#00000000"

Я думаю, что это решение лучше, так как оно не расширяет ширину TextView, которая может возникнуть при добавлении дополнительного символа (что более очевидно с фоном).

Ответ 9

Добавьте 3Dp padding справа в TextView. Я пробовал с 1dp и 2dp, но 3dp, похоже, полностью выполнил трюк.

android:paddingRight="3dp"

Ответ 10

Это мое решение: форматирование текстового поля и измерение. После этого заданная ширина текстового изображения с 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));

Работаю для меня. Надеюсь, что это поможет.

Ответ 11

У меня также была такая же проблема и я использовал неразрывную космическую сущность через HTML:

textView.setText("Magnifico" + Html.fromHtml("&nbsp;");