Ответ 1
Шаг 1. TextView с завернутым текстом
Первое, что нужно сделать, это заставить простой TextView
обернуть текст. Его легко:
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:singleLine="false"
android:text="very long text that will be wrapped to next line" />
Обратите внимание на атрибут singleLine
.
Шаг 2. Пользовательский макет
Теперь нам нужно как-то установить singleLine
атрибут false
в TextView
, используемый Spinner
, чтобы показать элемент в списке.
В вашем коде у вас, вероятно, есть место, где вы создаете адаптер для использования с Spinner
:
this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
android.R.layout.simple_spinner_dropdown_item);
Идея состоит в том, чтобы скопировать макет android.R.layout.simple_spinner_dropdown_item в ваш проект. Затем измените его, установив атрибут singleLine
в false
в CheckedTextView
:
Для этого добавьте файл в папку res/layout
с именем multiline_spinner_dropdown_item.xml
со следующим кодом:
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee" />
Обратите внимание, что этот файл идентичен макете android.R.layout.simple_spinner_dropdown_item, за исключением того, что он singleLine
установлен на false
сейчас.
Шаг 3. Создание адаптера с настраиваемым макетом
Измените код создания адаптера на:
this.mAdapter = ArrayAdapter.createFromResource(this, R.array.Planets,
R.layout.multiline_spinner_dropdown_item);
Вот скриншот из модифицированного примера SpinnerActivity
из Android SDK: