Как настроить спиннер в Android
Я хочу добавить пользовательскую высоту в выпадающий список Spinner
, скажем 30dp, и я хочу скрыть разделители выпадающего списка Spinner
.
до сих пор я пытался реализовать следующий стиль к Spinner
:
<style name="spinner_style">
<item name="android:paddingLeft">0dp</item>
<item name="android:dropDownWidth">533dp</item>
<item name="android:showDividers">none</item>
<item name="android:dividerHeight">0dp</item>
<item name="android:popupBackground">@drawable/new_bg</item>
<item name="android:dropDownHeight">70dp</item>
<item name="android:scrollbarAlwaysDrawVerticalTrack">true</item>
<item name="android:dropDownSelector">@android:color/white</item>
</style>
и код моего спиннера:
<Spinner
android:id="@+id/pioedittxt5"
android:layout_width="543dp"
android:layout_height="63dp"
android:layout_toRightOf="@+id/piotxt5"
android:background="@drawable/spinner"
style="@style/spinner_style"
android:dropDownVerticalOffset="-53dp"
android:spinnerMode="dropdown"
android:drawSelectorOnTop="true"
android:entries="@array/travelreasons"
android:prompt="@string/prompt" />
но, кажется, ничего не работает.
5 ответов:
создайте пользовательский адаптер с пользовательским макетом для вашего счетчика.
Spinner spinner = (Spinner) findViewById(R.id.pioedittxt5); ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.travelreasons, R.layout.simple_spinner_item); adapter.setDropDownViewResource(R.layout.simple_spinner_dropdown_item); spinner.setAdapter(adapter);
R. макет.simple_spinner_item
<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="@style/spinnerItemStyle" android:maxLines="1" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" />
R. макет.simple_spinner_dropdown_item
<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="@style/spinnerDropDownItemStyle" android:maxLines="1" android:layout_width="match_parent" android:layout_height="?android:attr/dropdownListPreferredItemHeight" android:ellipsize="marquee" />
в стилях добавьте ваши изготовленные на заказ размеры и высоту согласно вашему требованию.
<style name="spinnerItemStyle" parent="android:Widget.TextView.SpinnerItem"> </style> <style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> </style>
вы можете создать полностью индивидуальный дизайн блесны как
Шаг 1: в папке drawable сделать фон.XML для пограничного прядильщика.
<?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http://schemas.android.com/apk/res/android"> <solid android:color="@android:color/transparent" /> <corners android:radius="5dp" /> <stroke android:width="1dp" android:color="@android:color/darker_gray" /> </shape>
Step2: для макета spinner используйте этот выпадающий значок или любое падение изображения.формат PNG
<RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="3dp" android:layout_weight=".28" android:background="@drawable/spinner_border" android:orientation="horizontal"> <Spinner android:id="@+id/spinner2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_centerVertical="true" android:layout_gravity="center" android:background="@android:color/transparent" android:gravity="center" android:layout_marginLeft="5dp" android:spinnerMode="dropdown" /> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:layout_gravity="center" android:src="@mipmap/drop" /> </RelativeLayout>
наконец, выглядит как ниже изображения, и это везде кликабельны в круглой области и нет необходимости писать список кликов для просмотрщик фото.
Шаг 3: для выпадающего дизайна удалите строку из выпадающего списка и измените цвет фона, Создать пользовательский адаптер как
Spinner spinner = (Spinner) findViewById(R.id.spinner1); String[] years = {"1996","1997","1998","1998"}; ArrayAdapter<CharSequence> langAdapter = new ArrayAdapter<CharSequence>(getActivity(), R.layout.spinner_text, years ); langAdapter.setDropDownViewResource(R.layout.simple_spinner_dropdown); mSpinner5.setAdapter(langAdapter);
в папке layout создайте R. layout.spinner_text.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layoutDirection="ltr" android:id="@android:id/text1" style="@style/spinnerItemStyle" android:singleLine="true" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:paddingLeft="2dp" />
в папке layout создаем simple_spinner_dropdown.xml
<?xml version="1.0" encoding="utf-8"?> <CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" style="@style/spinnerDropDownItemStyle" android:layout_width="match_parent" android:layout_height="wrap_content" android:ellipsize="marquee" android:paddingBottom="5dp" android:paddingLeft="10dp" android:paddingRight="10dp" android:paddingTop="5dp" android:singleLine="true" />
в стилях, вы можете добавить пользовательские размеры и высоту в соответствии с вашим требование.
<style name="spinnerItemStyle" parent="android:Widget.TextView.SpinnerItem"> </style> <style name="spinnerDropDownItemStyle" parent="android:TextAppearance.Widget.TextView.SpinnerItem"> </style>
наконец-то выглядит как
согласно требованию, вы можете изменить цвет фона и текст выпадающего цвета, изменив цвет фона или цвет текста simple_spinner_dropdown.xml
самое элегантное и гибкое решение я нашел до сих пор здесь: http://android-er.blogspot.sg/2010/12/custom-arrayadapter-for-spinner-with.html
в основном, выполните следующие действия:
- создайте XML-файл пользовательского макета для вашего выпадающего элемента, скажем, я назову его spinner_item.xml
создать пользовательский класс представления, для вашего выпадающего адаптера. В этом пользовательском классе необходимо перезаписать и настроить пользовательский раскрывающийся список макет элемента в методе getView() и getDropdownView (). Мой код, как показано ниже:
public class CustomArrayAdapter extends ArrayAdapter<String>{ private List<String> objects; private Context context; public CustomArrayAdapter(Context context, int resourceId, List<String> objects) { super(context, resourceId, objects); this.objects = objects; this.context = context; } @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } @Override public View getView(int position, View convertView, ViewGroup parent) { return getCustomView(position, convertView, parent); } public View getCustomView(int position, View convertView, ViewGroup parent) { LayoutInflater inflater=(LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); View row=inflater.inflate(R.layout.spinner_item, parent, false); TextView label=(TextView)row.findViewById(R.id.spItem); label.setText(objects.get(position)); if (position == 0) {//Special style for dropdown header label.setTextColor(context.getResources().getColor(R.color.text_hint_color)); } return row; } }
в вашей деятельности или фрагменте, используйте пользовательский адаптер для вашего вида spinner. Что-то вроде этого:
Spinner sp = (Spinner)findViewById(R.id.spMySpinner); ArrayAdapter<String> myAdapter = new CustomArrayAdapter(this, R.layout.spinner_item, options); sp.setAdapter(myAdapter);
где параметры-это список выпадающих элементов строки.
попробуй такое
я столкнулся с большим количеством проблем, когда я пытался другое решение...... После серии НИОКР теперь я получил решение
создать custom_spinner.XML в папке layout и вставьте этот код
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@color/colorGray"> <TextView android:id="@+id/tv_spinnervalue" android:layout_width="match_parent" android:layout_height="wrap_content" android:textColor="@color/colorWhite" android:gravity="center" android:layout_alignParentLeft="true" android:textSize="@dimen/_18dp" android:layout_marginTop="@dimen/_3dp"/> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:background="@drawable/men_icon"/> </RelativeLayout>
в работе
Spinner spinner =(Spinner)view.findViewById(R.id.sp_colorpalates); String[] years = {"1996","1997","1998","1998"}; spinner.setAdapter(new SpinnerAdapter(this, R.layout.custom_spinner, years));
создать новый класс адаптер
public class SpinnerAdapter extends ArrayAdapter<String> { private String[] objects; public SpinnerAdapter(Context context, int textViewResourceId, String[] objects) { super(context, textViewResourceId, objects); this.objects=objects; } @Override public View getDropDownView(int position, View convertView, @NonNull ViewGroup parent) { return getCustomView(position, convertView, parent); } @NonNull @Override public View getView(int position, View convertView, @NonNull ViewGroup parent) { return getCustomView(position, convertView, parent); } private View getCustomView(final int position, View convertView, ViewGroup parent) { View row = LayoutInflater.from(parent.getContext()).inflate(R.layout.custom_spinner, parent, false); final TextView label=(TextView)row.findViewById(R.id.tv_spinnervalue); label.setText(objects[position]); return row; }
}
Это сработало для меня:
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),R.layout.simple_spinner_item,areas); Spinner areasSpinner = (Spinner) view.findViewById(R.id.area_spinner); areasSpinner.setAdapter(adapter);
и в моей папке макета я создал
simple_spinner_item
:<TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@android:id/text1" android:layout_width="match_parent" // add custom fields here android:layout_height="wrap_content" android:textAppearance="?android:attr/textAppearanceListItemSmall" android:gravity="center_vertical" android:paddingStart="?android:attr/listPreferredItemPaddingStart" android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" android:minHeight="?android:attr/listPreferredItemHeightSmall" android:paddingLeft="?android:attr/listPreferredItemPaddingLeft" android:paddingRight="?android:attr/listPreferredItemPaddingRight" />