Spinner nie zawija tekstu - czy to błąd Androida?

Jeśli tekst Spinner jest zbyt długi, aby zmieścić się w jednej linii, tekst nie jest zawinięty, ale odcięty. Jest to tylko przypadek dla poziomu API >= 11. Oto screeny z Androida 4.2.2 (lewej), co pokazuje niewłaściwe zachowanie i 2.3.3 (prawo) tam, gdzie wygląda to zgodnie z oczekiwaniami.

android:singleLine="false" po prostu zostaje tu zignorowany. Tak jak wszystkie inne próby jak android:lines, android:minLines, itd. TextView jakoś wydaje się być znacznie szersza niż szerokość okna.

Widziałem innych ludzi mających ten sam problem, ale nikt nie mógł znaleźć rozwiązania. To błąd systemowy? Nie sądzę, aby ta niezgodność między wersjami systemu operacyjnego mogła być zamierzona.


Uwaga:

Pojawiły się odpowiedzi sugerujące stosunkowo proste rozwiązania.

  • Zapisanie niestandardowego Adapter i nadpisanie getView() oraz getDropDownView(). Nie jest to rozwiązanie tutaj, ponieważ w tym momencie nadal istnieje oryginalny problem: jak musi wyglądać układ, aby poradzić sobie z prawidłowym owijaniem linii?

  • Zawijanie TextView widoku rozwijanego do rodzica ViewGroup. Nie działa z android:layout_width="match_parent", ponieważ szerokość rodzica dziwnie wydaje się być nieograniczona.

  • Nadanie widoku rozwijanego stałej szerokości. Nie jest to odpowiednie dla różnych szerokości, jakie może mieć Spinner.

  • I oczywiście nie ma rozwiązania, aby ręcznie wstawić \ns gdziekolwiek w tekst.


]}

UPDATE: wgrałem to również jako przykładowy projekt na GitHub: Pobierz

/ res / wartości / tablice.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" />

Zestaw Adapter:

spinner.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.items,
            R.layout.spinner_item));
Author: Andrey Shchekin, 2013-01-03

14 answers

W holo theme spinner domyślnie używa trybu rozwijanego. A wszystkie ruchy z nadpisywaniem domyślnych stylów po prostu przechodzą do przełączania trybu spinner do trybu dialogowego, który z powodzeniem zawija tekst wielowierszowy, jak w api 11. Zamiast tego możesz utworzyć spinner za pomocą new Spinner(context, Spinner.MODE_DIALOG) lub w XML: android:spinnerMode="dialog". Ale to nie rozwiązuje problemu, ponieważ jest to okno dialogowe, a nie rozwijane.

Znalazłem inne rozwiązanie tego problemu: Override getDropDownView method in ArrayAdapter and put setSingleLine(false) in POST method of view. Więc kiedy widok całkowicie utworzony zawija tekst do odpowiednich linii.

@Override
public View getDropDownView(final int position, View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = new TextView(_context);
    }

    TextView item = (TextView) convertView;
    item.setText("asddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd");
    final TextView finalItem = item;
    item.post(new Runnable() {
        @Override
        public void run() {
            finalItem.setSingleLine(false);
        }
    });
    return item;
}

UPDATE:

I oto kolejna odpowiedź.

Ręcznie zawiń listview w PopupWindow i pokaż go pod TextView po kliknięciu i ukryj go po kliknięciu listy.

Prosta implementacja tylko po to, aby pokazać pomysł:

public class MySpinner extends TextView {
    private PopupWindow _p;
    private ListView _lv;
    public MySpinner(Context context) {
        super(context);
        init();
    }
    public MySpinner(Context context, AttributeSet attributeSet){
        super(context, attributeSet);
        init();
    }

    private void init(){
        setBackgroundResource(R.drawable.spinner_background);
        final List<String> list = new ArrayList<String>();
        list.add("Very long text AAAAAAAAAAAAAAAA");
        list.add("1 Very long text AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
        list.add("2 Very long text A");
        list.add("3 Very long text AAAAAAAAA");

        setMinimumWidth(100);
        setMaxWidth(200);

        _lv = new ListView(getContext());
        _lv.setAdapter(new ArrayAdapter<String>(getContext(), R.layout.simple_list_item_1, list));
        _lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                _p.dismiss();
                setText(list.get(i));
            }
        });

        setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View view) {

                _p = new PopupWindow(getContext());
                _p.setContentView(_lv);
                _p.setWidth(getWidth());
                _p.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
                _p.setTouchable(true);
                _p.setFocusable(true);
                _p.setOutsideTouchable(true);
                _p.showAsDropDown(view);
            }
        });
    }
}
 26
Author: Kolchuga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-29 02:49:37

Rozwiązałem ten problem przełączając się na okno dialogowe:

<Spinner
  ...
android:spinnerMode="dialog" />
 12
Author: cVoronin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-25 11:17:09

Tylko kombinacja rozwiązań tutaj zadziałała dla mnie (testowane na Androidzie 5.1 też):

Spinner_item.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_width="match_parent"
             android:layout_height="wrap_content">

  <TextView
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:textAlignment="inherit"/>
</LinearLayout>

Kod

  final ArrayAdapter<String> spinnerArrayAdapter=new ArrayAdapter<String>(activity,R.layout.spinner_item,android.R.id.text1,spinnerItemsList)
  {
  @Override
  public View getDropDownView(final int position,final View convertView,final ViewGroup parent)
    {
    final View v=super.getDropDownView(position,convertView,parent);
    v.post(new Runnable()
    {
    @Override
    public void run()
      {
      ((TextView)v.findViewById(android.R.id.text1)).setSingleLine(false);
      }
    });
    return v;
    }
  };
  spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 12
Author: android developer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-23 09:05:37

Osiągnięcie wielu liniowych rozwijanych elementów na Spinner podczas korzystania z motywu Holo nie jest możliwe, z tego, co próbowałem.

Rozwiązaniem obejścia problemu jest:

  • Utwórz styl dla Spinner, który nie dziedziczy po Holo. Spowoduje to włączenie wielu pozycji rozwijanych.
  • Zaprojektuj Spinner 'ręcznie' tak, aby wyglądał jak Holo - tematycznie.

To daje (pokazując Stany zamknięte i otwarte):

Tutaj wpisz opis obrazka

Szczegóły realizacja:

Nie ma możliwości dziedziczenia z Holo tematu na Spinner i pokazywania wielu linii w Spinner rozwijanym elemencie, o ile wiem, nawet jeśli ustawimy rozwijany element TextView singleLine atrybut false i podaj niestandardowy układ. Starałem się również zachować styl Holo, ale zmienić

android:spinnerStyle
android:spinnerItemStyle 
android:spinnerDropDownItemStyle 

Atrybuty stylów (przykład użycia tych atrybutów tutaj ), ale nie mogłem sprawić, by dało to wynik wielowierszowy.

Jednakże, jeśli obejdziemy styl dla Spinner i nie Dziedzicz spinnerStyle z Holo:

 <style name="AppTheme" parent="android:Theme.Holo.Light">
    <item name="android:spinnerStyle">@style/spinnerStyle</item>
</style>

<--no parent attribute-->
 <style name="spinnerStyle">
    <item name="android:clickable">true</item>
</style>

Następnie rozwijany element będzie obsługiwał wyświetlanie wielu linii. Ale teraz straciliśmy Holo temat na Spinner i stan zamknięty wygląda jak TextView, a nie Spinner bez strzałki lub wizualnej wskazówki to jest Spinner. Jeśli zamiast tego ustawimy spinnerStyle rodzica na: parent="android:style/Widget.Spinner:

<style name="spinnerStyle" parent="android:style/Widget.Spinner">
    <item name="android:clickable">true</item>
</style>

Stan zamknięty Spinner pokaże strzałkę, ale będzie stylizowany na szary pre-Holo Spinner, który wygląda nie na miejscu w aplikacji Holo.

Więc możliwe rozwiązanie jest wtedy:

  • Zastąp motyw dla spinnerStyle i nie używaj Holo dla rodzica. spowoduje to włączenie tekstu wielowierszowego w rozwijanych elementach.
  • Zmień tło Spinner, aby wyglądało tak, jakby dziedziczyło motyw Holo.

Oto przykład:

Utwórz podstawowe działanie:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Spinner spinner = (Spinner)findViewById(R.id.styled_spinner);

    spinner.setAdapter(ArrayAdapter.createFromResource(this,
            R.array.items,
            R.layout.spinner_item));        
}

Układ aktywności:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="50dip"
    tools:context=".MainActivity" >

    <Spinner
        android:id="@+id/styled_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

Style:

<resources xmlns:android="http://schemas.android.com/apk/res/android">
    <style name="AppTheme" parent="android:Theme.Holo.Light">
        <item name="android:spinnerStyle">@style/spinnerStyle</item>
    </style>
    <style name="spinnerStyle">
        <item name="android:clickable">true</item>
        <item name="android:background">@drawable/spinner_background_holo_light</item>
    </style>
</resources>

W folderze drawable, umieść spinner_background_holo_light:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_enabled="false"
        android:drawable="@drawable/spinner_disabled_holo_light" />
    <item android:state_pressed="true"
        android:drawable="@drawable/spinner_pressed_holo_light" />
    <item android:state_pressed="false" android:state_focused="true"
        android:drawable="@drawable/spinner_focused_holo_light" />
    <item android:drawable="@drawable/spinner_default_holo_light" />
</selector>

I umieść te losowania w swoim drawables-hdpi folderze:

Tutaj wpisz opis obrazkaSpinner_default_holo_light.9.png

Tutaj wpisz opis obrazkaSpinner_disabled_holo_light.9.png

Tutaj wpisz opis obrazkaSpinner_focused_holo_light.9.png

Tutaj wpisz opis obrazkaSpinner_pressed_holo_light.9.png

To tworzy spinner z Holo-tematycznie zamknięty stan i elementy Wielowierszowe, jak pokazano na zrzutach ekranu powyżej.

Elementy rozwijane w tym przykładzie nie są Holo-tematyczne, ale być może jest to akceptowalny kompromis, jeśli Wielowierszowe wyświetlanie rozwijanych elementów jest naprawdę ważne.

W tym przykładzie android:minSdkVersion została ustawiona na 14 i android:targetSdkVersion na 17 w manifeście.

Holo grafika i kod spinner_background_holo_light.xml pochodzą z Holoeverywhere Copyright (c) 2012 Christophe Versieux, Sergey Shatunov. Zobacz linked-to github project po szczegóły licencji.

 6
Author: Gunnar Karlsson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:27

Dodanie LinearLayout wokół widoku tekstowego pozwala na poprawne zawijanie tekstu.

Layout (common_domainreferencemodel_spinner_item.xml):

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:padding="4dp">

       <TextView
            android:id="@+id/nameTextView"
            android:singleLine="false"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

</LinearLayout>

Adapter:

public class DomainReferenceModelAdapter extends ArrayAdapter<DomainReferenceModel> {

    private List<DomainReferenceModel> objects;
    private LayoutInflater inflater;
    private int oddRowColor = Color.parseColor("#E7E3D1");
    private int evenRowColor = Color.parseColor("#F8F6E9");

    public DomainReferenceModelAdapter(Context context, int resource, List<DomainReferenceModel> objects) {
        super(context, resource, objects);
        this.objects = objects;
        this.inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    static class ViewHolder {
        public TextView nameTextView;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        return getViewInternal(position, convertView, parent, false);
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        return getViewInternal(position, convertView, parent, true);
    }

    private View getViewInternal(int position, View convertView, ViewGroup parent, boolean isDropdownView) {
        View view = convertView;
        if (view == null) {
            view = inflater.inflate(R.layout.common_domainreferencemodel_spinner_item, null);
            ViewHolder viewHolder = new ViewHolder();
            viewHolder.nameTextView = (TextView) view.findViewById(R.id.nameTextView);
            view.setTag(viewHolder);
        }
        if (isDropdownView) {
            view.setBackgroundColor(position % 2 == 0 ? evenRowColor : oddRowColor);
        }
        ViewHolder holder = (ViewHolder) view.getTag();
        DomainReferenceModel model = objects.get(position);
        holder.nameTextView.setText(model.getName());
        return view;
    }

}
 6
Author: Mike Schall,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-01-02 18:08:57

Stanąłem przed tym samym problemem. Chcę zobaczyć 2 linie w rozwijanej liście spinnera, ale wszystkie rozwiązania, które znalazłem wydają mi się nierozsądne, aby rozwiązać taki prosty problem. Zbadałem kod źródłowy spinnera i znalazłem jeśli używamy custom .xml z atrybutem android: singleLine= "false"

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/multiline_spinner_text_view"
    android:layout_width="fill_parent"
    android:layout_height="?android:attr/listPreferredItemHeight"
    android:singleLine="false" />

I default ArrayAdapter, po kodzie wykonanym w ListPopupWindow everytime

    @Override
       View More obtainView(int position, boolean[] isScrap) {
            View view = super.obtainView(position, isScrap);

           if (view instanceof TextView) {
                ((TextView) view).setHorizontallyScrolling(true);
            }

            return view;        
}

I dlatego widzimy tylko jedną linię na liście / align = "left" /

Aby rozwiązać ten problem, nasz widok powinien być , a nie instancją TextView, po prostu umieść swój TextView wewnątrz FrameLayout lub LinearLayout.

   <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >

        <CheckedTextView
            android:id="@+id/multiline_spinner_text_view"
            android:layout_width="fill_parent"
            android:layout_height="?android:attr/listPreferredItemHeight"
            android:singleLine="false" />

    </LinearLayout>

I

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
               R.layout.multiline_spinner_dropdown_item,R.id.multiline_spinner_text_view,
                awasomeListValues);

To rozwiązanie działa zarówno w trybie spinner: MODE_DROPDOWN jak i MODE_DROPDOWN.Mam nadzieję, że ci to pomoże!

 2
Author: girlOnSledge,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-27 13:47:56

Myślę, że na Androidzie jest błąd. Możesz spróbować tego. Usuń spacje z tekstu, a następnie Wyświetl go będzie działać dobrze. Jeśli długość widoku tekstowego wynosi

Dodaj plik do folderu res / layout o nazwie multiline_spinner_dropdown_item.xml z przykładowym kodem:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
style="?android:attr/spinnerDropDownItemStyle"
android:singleLine="false"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:ellipsize="marquee" />

I kiedy tworzysz spinner utwórz go z tego układu.

Coś w rodzaju :

ArrayAdapter.createFromResource(this, items, R.layout.multiline_spinner_dropdown_item);
Zasadniczo skopiuj Androida.R. layout.simple_spinner_dropdown_item układ do projektu i zmodyfikować układ przez ustawienie singleLine atrybut false W CheckedTextView.
 2
Author: lokoko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-01 11:20:45

Czytanie tej odpowiedzi: textview casting error: - android.widget.LinearLayout nie może być rzucany na Androida.widget.TextView i w tym temacie, mógłbym rozwiązać ten problem: potrzebujemy LinearLayout owijającego TextView (tekst spinnera), aby uniknąć wydostania się tekstu z ekranu, ale będziemy mieli kilka problemów do rozwiązania. Na początek utwórz układ ( nazwałem go spinner_dd_item.xml):

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/simple_spinner_dropdown"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:paddingBottom="5dp"
            android:paddingLeft="10dp"
            android:paddingRight="10dp"
            android:paddingTop="5dp"
            android:textColor="@color/colorAccent"
            tools:text="Hello" />
    </LinearLayout>

Następnym krokiem jest utworzenie instancji ArrayAdapter, aby ustawić ją na "spinner": {]}

    ArrayAdapter<CharSequence> arrayAdapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.spinner_dd_item,
            R.id.simple_spinner_dropdown, hashmapToString(hashMap, keys)) {
        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {
            return getView(position, convertView, parent);
        }
    };
    spinner.setAdapter(arrayAdapter);

Nie zapomnij dodać nazwy układu i ID TextView na ArrayAdapter, ponieważ dodaliśmy LinearLayout i musimy określić TextView i nadpisać getDropDownView, aby uzyskać widok, który wyświetla dane w określonej pozycji w zestawie danych. Teraz widzimy, że spinner działa dobrze na nowszych i starszych wersjach Androida

 1
Author: Jaco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:47

Właśnie odkryłem, że android ma istniejący styl dla tej sprawy

final Spinner pelanggaran = (Spinner) findViewById(R.id.pelanggaran);
ArrayAdapter<CharSequence> pelanggaran_adapter = ArrayAdapter.createFromResource(this,R.array.pelanggaran_array, android.R.layout.simple_expandable_list_item_1);
pelanggaran_adapter.setDropDownViewResource(android.R.layout.simple_expandable_list_item_1);
pelanggaran.setAdapter(pelanggaran_adapter);
Mam nadzieję, że to rozwiązało twój problem.
 1
Author: Fajar Rukmo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-16 04:55:13

Miałem ten sam problem i znalazłem rozwiązanie.

Chciałem, aby tekst zawijał się na ekranie początkowym i w widoku rozwijanym.

Tekst zawijał się na wstępnym wyświetlaczu i dla rozwijanego menu znalazłem inne rozwiązanie zalecające użycie niestandardowego widoku układu liniowego ze stałą szerokością otaczającego widok tekstowy. To sprawiło, że lista rozwijana spinnera wyglądała poprawnie, podobnie jak lista początkowego wyboru. Jednak spowodowało to poważny problem na starszych urządzenia.

Początkowe wyświetlanie nie odświeży się, a tekst przybrał ułożony wygląd, jeśli próbowałem wybrać coś innego. a ponieważ układał się w dół, dodanie tła nie pomogło. Tutaj wpisz opis obrazka

Jak się okazuje adaptery mają metodę o nazwie setDropDownViewResource (), która pozwala ustawić inny widok dla rozwijanego menu niż ten, który jest wyświetlany w początkowym zaznaczeniu spinnera.

 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 domyślnym widokiem dostarczanym przez system android and my_simple_list_item is

<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 się wewnątrz rozwijanego widoku spinnera i w wyświetlanych zaznaczeniach spinnerów.

 0
Author: Michael Alan Huff,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-12 23:10:44

Po prostu zawiń TextView z LinearLayout:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="wrap_content">
    <TextView
            android:id="@android:id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"/>
</LinearLayout>
 0
Author: mixel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-16 12:18:35
ArrayAdapter<?> specAdapter =
   ArrayAdapter.createFromResource(
       getActivity().getBaseContext(),
       aa[position],
       android.R.layout.select_dialog_item);
specAdapter.setDropDownViewResource(android.R.layout.select_dialog_item);
 0
Author: user5723352,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-28 12:33:24

Oto, co zrobiłem, aby to działało:

ArrayAdapter<KeyValue> adapter = new ArrayAdapter<>(getContext(), R.layout.simple_dropdown_item_multiline, R.id.nameTextView, choices);

A to jest treść "simple_dropdown_item_multiline":

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content">

<TextView android:id="@+id/nameTextView"
          style="?android:attr/dropDownItemStyle"
          xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="wrap_content"
          android:ellipsize="marquee"
          android:paddingBottom="@dimen/large"
          android:paddingTop="@dimen/large"
          android:singleLine="false"
          android:textAppearance="?android:attr/textAppearanceLargePopupMenu"/>

 0
Author: Marco C.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-27 13:49:43

Rozwiązałem ten problem dodając \n (nowy wiersz) w tekście (tak proste).

<string name="bmr1">sedentary (little or no exercise)</string>
<string name="bmr2">lightly active (light exercise/\nsports 1-3 days/week)</string>
<string name="bmr3">moderately active (moderate exercise/\nsports 3-5 days/week)</string>
<string name="bmr4">very active (hard exercise/\nsports 6-7 days a week)</string>
<string name="bmr5">extra active (very hard exercise/sports &amp;\nphysical job or 2x training)</string>

Wygląda tak:

Tutaj wpisz opis obrazka

I jest to układ, który spinner używa jako wiersz:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/default_listview_row"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:gravity="center_vertical"
    android:textColor="@android:color/white"
    android:background="@android:color/transparent"
    android:padding="5dp" />
 -1
Author: Goran Horia Mihail,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-26 09:40:00