Spinner

  下拉选择框控件,默认样式在控件的右边有一个小箭头指示用户点击可以选择,有下拉选择框和弹窗选择两种模式。

xml属性

属性 解释
entries spinner的数据来源,使用res/values/arrays中的string-array字符串数组
spinnerMode 下拉模式,有两种:dropdown和dialog
prompt 当spinnerMode模式为dialog时,设置弹出的弹窗的标题
dropDownHorizontalOffset 设置下拉框和spinner控件的水平距离(发现并不起作用)
dropDownVerticalOffset 设置下拉框和spinner控件的垂直距离,默认是从spinner的上边框开始的
dropDownWidth 设置下拉框的宽度

使用方法

基本用法

//下拉选择框模式;
<Spinner
    android:id="@+id/spinner1_sp"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:entries="@array/spinnerData"
    android:spinnerMode="dropdown"
    />
//弹窗选择模式;
<Spinner
    android:id="@+id/spinner1_sp"
    android:layout_width="200dp"
    android:layout_height="50dp"
    android:entries="@array/spinnerData"
    android:spinnerMode="dialog"
    android:prompt="弹窗标题"
/>

在java代码中使用如下:

//声明Spinner控件;
Spinner mSpinner1Sp;
//Spinner控件的选择项的点击事件处理;
mSpinner1Sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
    @Override
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
        Log.e("===MockingJay===","选择了第:" + position "个位置的选项");
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {

    }
});

复杂用法

自定义Spinner控件的样式

  在实际项目中,我们可能需要给Spinner控件加一个边框,使用background这个属性配合shape的Drawable可以实现加边框的效果,但是加了边框之后,右边的小箭头就会消失掉,那么,我们可以使用layer-list的Drawable来实现既加了边框又有小箭头的效果。

//实现给Spinner添加边框以及不损失右边的小箭头的效果;
//其中bitmap中的图片就是自己要显示的右边小箭头的图标,也可以显示为其他自定义的图标;
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <shape>
            <corners android:radius="5dp" />
            <stroke
                android:width="1dp"
                android:color="#FF0000" />
        </shape>
    </item>
    <item>
        <bitmap
            android:gravity="end"
            android:src="@drawable/xialajiantou" />
    </item>
</layer-list>

自定义下拉选择框的样式

  Spinner控件的父控件是如下关系:
  ViewGroup
    -> AdapterView
      -> AbsSpinner
        -> Spinner
  也就是说Spinner和ListView一样,是可以使用适配器来自定义样式的。

-
-
-
-
-
-
-
-
-
--------------------------to be continued---------------------------