旋转下拉箭头

时间:2015-06-08 14:43:33

标签: android android-layout spinner

我正在尝试获取一个自定义Spinner,例如:

但我只能得到这个:

enter image description here

如您所见,我遇到了几个问题。

  1. 虽然我添加了自定义箭头,但仍然可以看到原始箭头。
  2. 我的自定义箭头会显示在每一行。
  3. 如何调整自定义箭头的尺寸和布局位置?
  4. 如何生成带下划线的行?
  5. 这是我的代码:

    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>
    

    但没有结果!我仍然看到这个:

    enter image description here

      

    编辑2

    我已将style.xml更改为:

    http://pastie.org/private/es40xgebcajajltksyeow

    这就是我得到的:

    enter image description here

    现在我没有更换下拉箭头图标,而是有第二个图标,全息复选框(效果很好,当我选择一个项目时选中),但是,我怎么才能得到我想要的那个? ?

    manifest.xml

    http://pastie.org/private/tu0izusbvvxe91lwmh9vnw

2 个答案:

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

最后,微调器看起来像enter image description here

  

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