Если текст элемента Spinner
слишком длинный и не помещается в одну строку, текст не переносится, а обрезается. Это только для уровня API >= 11. Вот скриншоты Android 4.2.2 (слева), на которых показано неправильное поведение, и Android 2.3.3 (справа), где все выглядит так, как ожидалось.
android:singleLine="false"
здесь просто игнорируется. Так что, как и все другие попытки, такие как android:lines
, android:minLines
и т. д. TextView
почему-то кажется намного шире, чем ширина окна.
Я видел, что у других людей была такая же проблема, но никто не мог найти решение. Так это системный баг? Я не думаю, что это несоответствие между версиями ОС может быть намеренным.
Пожалуйста, обрати внимание:
Были некоторые ответы, предлагающие относительно простые решения.
Написание пользовательского
Adapter
и переопределениеgetView()
, а такжеgetDropDownView()
. Это не решение здесь, потому что на данный момент все еще существует исходная проблема: как должен выглядеть макет для правильного переноса строк?Оборачиваем
TextView
раскрывающегося списка в родительскийViewGroup
. Не работает сandroid:layout_width="match_parent"
, потому что ширина родителя странно кажется неограниченной.Предоставление выпадающему представлению фиксированной ширины. Это не подходит для разной ширины, которую может иметь
Spinner
.И, конечно же, нет решения вручную вставлять
\n
в любом месте текста.
Воспроизвести с помощью следующего кода:
ОБНОВЛЕНИЕ: я также загрузил это как пример проекта на GitHub: Загрузить
/res/значения/массивы.xml:
<string-array name="items">
<item>Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt.</item>
<item>At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est.</item>
</string-array>
/res/layout/spinner_item.xml:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="none"
android:minHeight="?android:attr/listPreferredItemHeight"
android:singleLine="false" />
Установить Adapter
:
spinner.setAdapter(ArrayAdapter.createFromResource(this,
R.array.items,
R.layout.spinner_item));