我正在尝试获取一个自定义Spinner,例如:
但我只能得到这个:
如您所见,我遇到了几个问题。
这是我的代码:
onCreateView()
:
Spinner spinner = (Spinner) rootView.findViewById(R.id.spinner);
this.arraySpinner = new String[]{
"Seleziona una data",
"03 Agosto 2015",
"13 Giugno 2015",
"27 Novembre 2015",
"30 Dicembre 2015",
};
ArrayAdapter<String> adapter = new ArrayAdapter<>(
getActivity(),
R.layout.row_spinner,
R.id.weekofday,
arraySpinner);
spinner.setAdapter(adapter);
res/layout/row_spinner.xml
:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="8dp">
<TextView android:id="@+id/weekofday"
android:singleLine="true"
android:textSize="@dimen/textSize"
style="@style/SpinnerDropdown"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<ImageView android:id="@+id/icon"
android:paddingStart="8dp"
android:paddingLeft="8dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/spinner_arrow"/>
</LinearLayout>
修改
我删除了ImageView
并添加了从资源创建的第二个Spinner
:
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
getActivity(),
R.array.date,
R.layout.spinner_layout);
spinnerDate.setAdapter(adapter);
Spinner spinnerTime = (Spinner) rootView.findViewById(R.id.spinnerTime);
ArrayAdapter<CharSequence> adapterTime = ArrayAdapter.createFromResource(
getActivity(),
R.array.ore,
R.layout.spinner_layout);
spinnerTime.setAdapter(adapterTime);
这种布局:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/text1"
android:padding="8dp"
android:singleLine="true"
android:layout_height="wrap_content" android:layout_width="match_parent"/>
我已将此添加到我的style.xml
:
<style name="AppTheme" parent="@style/_AppTheme"/>
<!-- Base application theme. -->
<style name="_AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:dropDownSpinnerStyle">@style/SpinnerTheme </item>
<item name="android:windowActionBarOverlay">false</item>
<item name="colorPrimary">@color/ColorPrimary</item>
<item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>
....
....
....
<!--Spinner styles 2-->
<style name="SpinnerTheme" parent="android:Widget.Spinner">
<item name="android:background">@drawable/apptheme_spinner_background_holo_light</item>
<item name="android:dropDownSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>
<style name="SpinnerTheme.DropDown">
<item name="android:spinnerMode">dropdown</item>
</style>
<!-- Changes the spinner drop down item radio button style -->
<style name="DropDownItemSpinnerTheme" parent="android:Widget.DropDownItem.Spinner">
<item name="android:checkMark">@drawable/apptheme_btn_radio_holo_light</item>
</style>
<style name="ListViewSpinnerTheme" parent="android:Widget.ListView">
<item name="android:listSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>
<style name="ListViewSpinnerTheme.White" parent="android:Widget.ListView.White">
<item name="android:listSelector">@drawable/apptheme_list_selector_holo_light</item>
</style>
<style name="SpinnerItemTheme"
parent="android:TextAppearance.Widget.TextView.SpinnerItem">
<item name="android:textColor">#000000</item>
</style>
但没有结果!我仍然看到这个:
编辑2
我已将style.xml
更改为:
http://pastie.org/private/es40xgebcajajltksyeow
这就是我得到的:
现在我没有更换下拉箭头图标,而是有第二个图标,全息复选框(效果很好,当我选择一个项目时选中),但是,我怎么才能得到我想要的那个? ?
manifest.xml
:
答案 0 :(得分:9)
您必须将Imageview
移到自定义布局row_spinner.xml
中。如果您不需要在自定义布局中创建箭头,因为如果这样做,则会在每一行中创建,就像发生在您身上一样。为了向您展示相同的内容,您必须将Spinner
样式更改为styles.xml
。
例如:
<resources>
<style name="SpinnerTheme" parent="android:Widget.Spinner">
<item name="android:background">@drawable/spinner_background_holo_light</item>
<item name="android:dropDownSelector">@drawable/list_selector_holo_light</item>
</style>
<style name="SpinnerTheme.DropDown">
<item name="android:spinnerMode">dropdown</item>
</style>
<!-- Changes the spinner drop down item radio button style -->
<style name="DropDownItemSpinnerTheme" parent="android:Widget.DropDownItem.Spinner">
<item name="android:checkMark">@drawable/btn_radio_holo_light</item>
</style>
<style name="ListViewSpinnerTheme" parent="android:Widget.ListView">
<item name="android:listSelector">@drawable/list_selector_holo_light</item>
</style>
<style name="ListViewSpinnerTheme.White" parent="android:Widget.ListView.White">
<item name="android:listSelector">@drawable/list_selector_holo_light</item>
</style>
<style name="SpinnerItemTheme"
parent="android:TextAppearance.Widget.TextView.SpinnerItem">
<item name="android:textColor">#000000</item>
</style>
</resources>
有关详细信息,请查看:http://androidopentutorials.com/android-how-to-get-holo-spinner-theme-in-android-2-x/
修改
selector_spinner.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<layer-list>
<item>
<shape>
<gradient android:angle="90" android:endColor="#ffffff" android:startColor="#ffffff" android:type="linear" />
<stroke android:width="1dp" android:color="#504a4b" />
<corners android:radius="5dp" />
<padding android:bottom="3dp" android:left="3dp" android:right="3dp" android:top="3dp" />
</shape>
</item>
<item>
<bitmap android:gravity="bottom|right" android:src="@android:drawable/arrow_up_float" />
</item>
</layer-list>
</item>
</selector>
styles.xml:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:spinnerStyle">@style/SpinnerTheme</item>
</style>
<style name="SpinnerTheme" parent="android:Widget.Spinner">
<item name="android:background">@drawable/selector_spinner</item>
</style>
</resources>
最后,微调器看起来像
编辑2
以下代码进入details_fragment_three.xml
<Spinner
android:id="@+id/spinnerDate"
android:layout_marginLeft="-8dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/spinner_item_drawable"/>
答案 1 :(得分:0)
您可以使用自己的下拉图片;
<item>
<layer-list>
<item>
<color android:color="@android:color/white" />
</item>
<item>
<bitmap android:gravity="center_vertical|right" android:src="@drawable/down_arrow" /> // down_arrow replace your image
</item>
</layer-list>
</item>
</selector>