Предотвращение разрыва строки в TextView

В моем приложении Android у меня есть текстовое представление, которое отображает текст, содержащий специальные символы. TextView каким-то образом автоматически разбивает строки на символы '/' и '-'.

Например, строка "aaaaaaa/bbb-ccccc/ddd" отображается как

aaaaaaa/
bbb-
ccccc/
ddd

Однако я хотел бы отображать его без каких-либо строк, кроме тех, которые находятся на границах представления, т.е. вот так:

aaaaaaa/bb
bb-ccccc/d
dd

Есть ли способ отключить автоматические разрывы или избежать этих символов? Я уже пробовал убегать с \uFEFF без успеха.

Ответ 1

Сохраняйте свой атрибут textview

android:layout_width="wrap_content"
android:layout_height="wrap_content"

Определите свою строку в файле string.xml

<string name="Username"> aaaaaaa\/bb\nbb\-ccccc\/d\ndd</string>

Ответ 2

Возможно, это решение: fooobar.com/questions/610623/...

Я добавил косую черту:

public class WordBreakTransformationMethod extends ReplacementTransformationMethod {
    private static WordBreakTransformationMethod instance;

    private WordBreakTransformationMethod() {}

    public static WordBreakTransformationMethod getInstance() {
        if (instance == null) {
            instance = new WordBreakTransformationMethod();
        }

        return instance;
    }

    private static char[] dash = new char[]{'-', '\u2011'};
    private static char[] space = new char[]{' ', '\u00A0'};
    private static char[] slash = new char[]{'/', '\u2215'};

    private static char[] original = new char[]{dash[0], space[0], slash[0]};
    private static char[] replacement = new char[]{dash[1], space[1], slash[1]};

    @Override
    protected char[] getOriginal() {
        return original;
    }

    @Override
    protected char[] getReplacement() {
        return replacement;
    }
}

Ответ 3

вы, вероятно, можете использовать атрибут Lines или его метод встречной части setLines (целое)

Ответ 4

Нет готового решения и нет такой вещи, как "обертывание текста буквами в TextView", единственный способ сделать это в хорошем смысле - это расширить TextView и изменить Paint breakText (текст строки, логический метод forwards, float maxWidth, float [ ] measuredWidth).

Кроме того, вы можете рассчитать размер TextView в пикселях, рассчитать ширину одной буквы в пикселях, затем найти количество букв (X), которые будут вписываться в одну строку, а затем вставить строку после каждой буквы X

Ответ 5

Я проверил следующий код. Вы можете даже преобразовать его в функцию:

    String specialString = "a/b/-c/d-d";
    String[] specialArray = specialString.split("/");
    String str = "";
    for(int i = 0; i < specialArray.length - 1; i++){
        str = str + specialArray[i] + Character.toString((char) 47);
    }
    str = str + specialArray[specialArray.length - 1];
    specialArray = str.split("-");
    str = "";
    for(int i = 0; i < specialArray.length - 1; i++){
        str = str + specialArray[i] + Character.toString((char) 45);
    }
    str = str + specialArray[specialArray.length - 1];
    textView.setText(str);

Теперь текст не выходит

Ответ 6

Вы можете рассчитать размер текста таким образом:

String text = "This is my text";
Paint textPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
textPaint.setTextSize(14.0f);
Rect bounds = new Rect();
textPaint.getTextBounds(text, 0, text.length(), bounds);

bounds.width() // width in pixels
bounds.height() // height in pixels

На основе этих значений вы можете разбить текст на части и вставить символы новой строки.

Ответ 7

Это новая вещь в Android 6.

Попробуйте добавить это в макет xml TextView

android:hyphenationFrequency="none"

Ответ 8

это работа для меня в Котлине

object WordBreakTransformationMethod : ReplacementTransformationMethod() {
    private val dash = charArrayOf('-', '\u2011')
    private val space = charArrayOf(' ', '\u00A0')
    private val slash = charArrayOf('/', '\u2215')

    private val original = charArrayOf(dash[0], space[0], slash[0])
    private val replacement = charArrayOf(dash[1], space[1], slash[1])

    override fun getOriginal() = original
    override fun getReplacement() = replacement
}

//tv_text is TextView
tv_text.apply {
    transformationMethod = WordBreakTransformationMethod
    text = item.text
}

Ответ 9

Вы можете попробовать следующее:

"aaaaaaa"+"/"+"bbb-ccccc"+"/"+"ddd"