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% надежные и согласованные результаты с завернутым текстом.

Смотрите: Spinner не переносит текст - это ошибка Android?

Другие вопросы по тегам