Spinner с несколькими строками перекрывает отображение выбранного элемента на Froyo
Я пытаюсь создать Spinners, которые выглядят одинаково на всех версиях Android обратно на Froyo. Для этого я использую HoloEverywhere. Часть текста элемента блесны состоит из более чем одной строки, и я хотел бы ее обернуть.
Используя макет по умолчанию, android.R.layout.simple_spinner_dropdown_item
или заменяющая его HoloEverywhere заменяет текст на эллипс, а не оборачивает его.
Взяв макет HoloEverywhere в качестве отправной точки для пользовательского макета с singleLine
установлен в false
, ellipsize
установлен в none
, а также layout_height
установлен в wrap_content
не помогает, текст все еще обрезан.
Я могу получить текст для правильной переноски в раскрывающемся списке, обернув TextView
в LinearLayout
, но на устройствах Froyo это портит отображение выбранного элемента:
Этот метод отлично работает на новых устройствах. Макеты выпадающих элементов хороши на всех устройствах. Но Froyo делает это странное наложение текста, когда я использую пользовательский макет выпадающего элемента. Каждый выбор просто складывается поверх последнего.
Этот вопрос: Spinner не переносит текст - это ошибка Android? Что касается переноса текста в Spinners, предполагается, что единственный способ сделать это - воссоздать стиль с нуля без наследования, но это звучит безумно и подвержено проблемам.
my_simple_list_item_1.xml:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/android:text1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:ellipsize="marquee"
android:layout_gravity="center_vertical"
android:singleLine="false"/>
</LinearLayout>
Джава:
import org.holoeverywhere.widget.Spinner;
spinner1.setAdapter(ArrayAdapter.createFromResource(this,
R.array.array_of_strings, R.layout.my_simple_list_item_1));
2 ответа
Я нашел решение. Текст был упакован, так как начальный экран счетчиков мог обрабатывать только текстовые представления, и я нашел другое решение, рекомендующее использовать линейный макет. Это сделало выпадающее меню счетчика правильным. Как выяснилось, у адаптеров есть ресурс setDropDownViewResource(), который позволяет вам установить другое представление для выпадающего списка, чем то, которое отображается в выборе счетчика.
import org.holoeverywhere.widget.Spinner;
ArrayAdapter adapter1 = ArrayAdapter.createFromResource(this,R.array.array_of_strings,R.layout.simple_list_item_1);
adapter1.setDropDownViewResource(R.layout.my_simple_list_item_1);
spQ1.setAdapter(adapter1);
в этом примере simple_list_item - это представление по умолчанию, предоставляемое android, а mY_simple_list_item -
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="300dp"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/android:text1"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:ellipsize="marquee"
android:layout_gravity="center_vertical"
android:singleLine="false"/>
</LinearLayout>
Теперь текст переносится внутри выпадающего списка счетчика И в отображаемом выделении счетчиков.
Похоже, вы толкаете в гору. Я предполагаю, что ваш клиент никогда не сможет получить 100% надежные и согласованные результаты с завернутым текстом.