8

Próbuję utworzyć Spinners, które wyglądają tak samo we wszystkich wersjach Androida z powrotem do Froyo. W tym celu używam HoloEverywhere. Niektóre z tekstów przedmiotu na spinner to więcej niż jedna linia i chciałbym, żeby się zawinęły.Spinner z elementami wieloliniowymi nakłada się na wybrany element wyświetlania na Froyo

Użycie domyślnego układu, android.R.layout.simple_spinner_dropdown_item lub HoloEverywhere's drop-in replacement for it powoduje elipsyzację tekstu zamiast jego zawijania.

Biorąc układ w HoloEverywhere jako punkt wyjścia do niestandardowy układ z singleLine zestaw do false, ellipsize zestaw do none i layout_height zestaw do wrap_content nie pomaga, tekst jest nadal odcięta.

I może uzyskać tekst zawijać poprawnie w rozwijanym przez owijanie TextView w LinearLayout, ale na Froyo urządzeń ten bałagan wyświetlanie pozycji wybrany: Every time you can't get a uniform look back to froyo jake wharton sheds a single tear.

ten metoda działa dobrze na nowszych urządzeniach. Rozmieszczone elementy są dobrze widoczne na wszystkich urządzeniach. Ale Froyo powoduje, że ten dziwny tekst nakłada się, gdy używam niestandardowego układu elementów. Każda selekcja jest po prostu ułożona na ostatnim.

To pytanie: Spinner does not wrap text -- is this an Android bug? o zawijaniu tekstu w Spinners sugeruje, że jedynym sposobem na to jest odtworzenie stylizacji od zera bez dziedziczenia, ale to brzmi szalenie i podatnie na problemy.

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> 

Java:

import org.holoeverywhere.widget.Spinner; 

    spinner1.setAdapter(ArrayAdapter.createFromResource(this, 
      R.array.array_of_strings, R.layout.my_simple_list_item_1)); 
+0

Uwaga: istnieją dwa pliki stylu, jeden dla elementów listy rozwijanej i jeden dla wybranego elementu listy (który brzmi jak ten, który się nakłada). Czy wyraźnie ustawiasz wybrany styl? – blahdiblah

+0

Czy próbowałeś po prostu nadać układowi tło, aby nawet gdyby się nakładało, nie zobaczysz, co jest pod spodem? – blahdiblah

+0

Hej tam Bladiblah, dzięki za odpowiedź. Nie wierzę, że ustawiam wybrany styl jawnie. Jednak, żeby sprawdzić, co się dzieje, zrobiłem to z tła. Naprawdę miałem nadzieję, że to zadziała, ale niestety układał się w niewłaściwy sposób. Jeśli umieściłbym tło w tekście, zobaczyłbym tylko pierwszy możliwy do wybrania element w przędzarce (lub pierwszym elemencie w tablicy). Wygląda na to, że podczas układania nowych rzeczy wychodziło poniżej starych rzeczy, więc dodanie tła pozwoliło mi tylko zobaczyć ten pierwszy wybór. –

Odpowiedz

8

znalazłem rozwiązanie. Tekst był zawijany, ponieważ początkowy wyświetlacz spinnerów mógł obsługiwać tylko widoki tekstu, a ja znalazłem inne rozwiązanie zalecające użycie układu liniowego. To sprawiło, że menu rozwijane wyglądało prawidłowo. Jak się okazuje, adaptery mają zasób o nazwie setDropDownViewResource(), który pozwala ustawić inny widok listy rozwijanej niż to, co jest wyświetlane w wyborze pokrętła.

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); 

w tym przykładzie simple_list_item jest widok domyślny dostarczane przez Android i mY_simple_list_item jest

<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> 

Teraz tekst zawija wewnątrz widoku rozwijanej turbinki aw błystki wyświetlony wybór.

Powiązane problemy