У меня есть кнопка с длинным текстом, который я хотел бы растянуть на две строки, чтобы ширина кнопки была того же размера, что и другие.
Проблема в том, что когда я делаю это с помощью кода XML, новая строка игнорируется как AVD, так и моими аппаратными устройствами (но правильно отображается в предварительном просмотре редактора). Когда я делаю это с помощью кода Java, это уважают.
Это игнорируется:
<Button
android:id = "@+id/button"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "doyouspeakenglish"
android:text = "Do you\nspeak English?" />
Это правильно применяет новую строку:
((Button) findViewById(R.id.button)).setText("Do you\nspeak English?");
В чем может быть причина игнорирования способа XML? Я также пробовал , как предлагается здесь: как я могу отобразить несколько строк текста на кнопке. Опять безуспешно.
Полный код макета
<?xml version = "1.0" encoding = "utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android = "http://schemas.android.com/apk/res/android"
xmlns:app = "http://schemas.android.com/apk/res-auto"
xmlns:tools = "http://schemas.android.com/tools"
android:layout_width = "match_parent"
android:layout_height = "match_parent"
tools:context = ".MainActivity">
<GridLayout
android:layout_width = "368dp"
android:layout_height = "495dp"
android:layout_marginBottom = "8dp"
android:layout_marginEnd = "8dp"
android:layout_marginStart = "8dp"
android:layout_marginTop = "8dp"
android:columnCount = "2"
android:rowCount = "4"
app:layout_constraintBottom_toBottomOf = "parent"
app:layout_constraintEnd_toEndOf = "parent"
app:layout_constraintStart_toStartOf = "parent"
app:layout_constraintTop_toTopOf = "parent">
<Button
android:id = "@+id/button"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "doyouspeakenglish"
android:text = "Do you\nspeak English?" />
<Button
android:id = "@+id/button2"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "goodevening"
android:text = "Good Evening" />
<Button
android:id = "@+id/button3"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "hello"
android:text = "Hello" />
<Button
android:id = "@+id/button4"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "howareyou"
android:text = "How are you?" />
<Button
android:id = "@+id/button5"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "ilivein"
android:text = "I live in..." />
<Button
android:id = "@+id/button6"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "mynameis"
android:text = "My name is..." />
<Button
android:id = "@+id/button7"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "please"
android:text = "Please" />
<Button
android:id = "@+id/button8"
android:layout_columnWeight = "1"
android:layout_gravity = "fill"
android:layout_rowWeight = "1"
android:onClick = "playSpeech"
android:tag = "welcome"
android:text = "Welcome" />
</GridLayout>
</android.support.constraint.ConstraintLayout>
Другие детали: Использование Android Studio 3.1.4 и SDK v26
Обратите внимание, что этот вопрос не совпадает с Как добавить новую строку в TextView в Android?, потому что предлагаемые решения для textview не работают для моего корпуса button.
@NileshRathod Да, я тоже пробовал, но не работает. Также обратите внимание, что связанный с вами снимок экрана - это скриншоты предварительного просмотра в редакторе. В моем редакторе это тоже отображается правильно, но в эмуляторе и на моих телефонах - нет.
Для меня android:text = "Do you \n speak English?" и android:text = "Do you \r\n speak English?" работают нормально на реальном устройстве проверьте скриншот снимок экрана изображения
@NileshRathod Не могли бы вы предоставить мне весь свой XML-код, пожалуйста? Поэтому я могу сравнить, чтобы увидеть, проблема в синтаксисе
проверьте мой макет ниже




Попробуй это
<LinearLayout
android:layout_width = "wrap_content"
android:layout_height = "wrap_content"
android:orientation = "vertical">
<Button
android:id = "@+id/button"
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:onClick = "playSpeech"
android:tag = "doyouspeakenglish"
android:maxLines = "2"
android:text = "Do you \n speak English?" />
<Button
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:onClick = "playSpeech"
android:tag = "doyouspeakenglish"
android:maxLines = "2"
android:text = "Do you \n speak English?" />
<Button
android:layout_width = "match_parent"
android:layout_height = "wrap_content"
android:onClick = "playSpeech"
android:tag = "doyouspeakenglish"
android:maxLines = "2"
android:text = "Do you \n speak English?" />
</LinearLayout>
Происходят странные вещи ... Я заменил свои кнопки на ваши (я не копировал LinearLayout), но мой макет кнопок всегда отображается в эмуляторе. Я очищал, перестраивал и аннулировал / перезапускал кеши несколько раз, но ничего не изменилось. Но если я посмотрю на ваш код, это именно то, что я пробовал раньше, за исключением LinearLayout, потому что сейчас я не хочу этого.
@EarthMind также Strange, ваш код работает, найдите в моем устройстве i.stack.imgur.com/qzm8X.png
Как я и подозревал после всех этих поисков, проблема заключалась в другом. К счастью, это не коррумпированная установка, а просто постоянно использовавшаяся другая структура почты. У меня был дополнительный файл activity_main.xml (v21), который я создал случайно раньше, он содержал более старый код. Вот почему новая строка была проигнорирована, и ваш XML-код также не применялся. Я рада, что теперь все кончено :-)
Это проблема, о которой я не знал, потому что я всегда использую строковые ресурсы.
И проблема существует только в дизайне. В эмуляторе я вижу разрыв строки.
В любом случае добавьте эту строку в strings.xml:
<string name = "mytext">Do you\nspeak English?</string>
и установите текст кнопки:
android:text = "@string/mytext"
Так работает \n.
К сожалению, это не решает проблему. По-прежнему работает только код Java.
@EarthMind кажется, что мы сталкиваемся с разными проблемами, поскольку в моем случае разрыв строки работает в эмуляторе / устройстве, но не в предварительном просмотре
Как вы и предполагали, проблема заключалась в другом. Если вам интересно, посмотрите мой последний комментарий к Нилешу.
@EarthMind Я рад, что твоя проблема решена. У меня нет, но, как я уже упоминал, я всегда использую ресурсы (я считаю, что это лучшая практика), поэтому проблем нет.
Верно, это рекомендуемая практика. В моем случае я использую жестко запрограммированные строки, потому что это очень простое приложение для обучения и не служит для других целей.
Как я и подозревал после всех этих поисков, проблема заключалась не в коде. К счастью, это не поврежденная установка, а просто другой основной макет, который все время использовался по умолчанию в эмуляторе или на моих телефонах.
У меня был дополнительный activity_main.xml (v21), который я создал случайно раньше, и он содержал более старый код. Вот почему мои обновления настоящего activity_main.xml были проигнорированы.
Попробуйте это
android:text = "Do you \r\n speak English?", попросите вас проверить этот ответ stackoverflow.com/a/23721628/7666442 Посмотреть результат снимок экрана