我想一个自定义的高度添加到的下拉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" />
但似乎没有奏效。
创建你的微调自定义布局的自定义适配器。
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.layout.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.layout.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>
您可以创建全定制设计微调等作为
第一步:在绘制文件夹使background.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>
第二步:对于微调使用此下拉图标的布局设计或任何图像drop.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>
最后看起来像下面的图片,它是圆形区域,没有必要写点击李斯特的ImageView的到处点击。
第三步:对于下拉设计,请从下拉的ListView行和改变背景颜色,创建自定义适配器等作为
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);
在布局文件夹中创建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"
/>
在布局文件夹中创建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 sp = (Spinner)findViewById(R.id.spMySpinner); ArrayAdapter<String> myAdapter = new CustomArrayAdapter(this, R.layout.spinner_item, options); sp.setAdapter(myAdapter);
其中options是下拉菜单项目字符串列表。
试试这个
我面临很多问题,当我试图其他的解决办法......经过大量的R&d的现在,我得到的解决方案
在布局文件夹中创建custom_spinner.xml并粘贴此代码
<?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" />