AppCompatSpinner的使用

AppCompatSpinner的使用

布局:

<androidx.appcompat.widget.AppCompatSpinner
		android:id="@+id/spinner"
		android:layout_width="200dp"
		android:layout_height="40dp"
		android:dropDownVerticalOffset="0dp"
		android:dropDownHorizontalOffset="0dp"
		android:background="@color/white"
		android:spinnerMode="dropdown"
		android:overlapAnchor="false"
		>
</androidx.appcompat.widget.AppCompatSpinner>

其中,
dropDownVerticalOffset、dropDownHorizontalOffset是控制spinner弹出以后的相对spinner展开前布局位置的偏移量,
并不能控制弹出动画的起始位置,所以用这个组件没有达到从下方弹出的需求,我后来改用了自定义popupWindow,闲下来再看看Spinner修改动画起始位置有没有搞头。
在这里插入图片描述给spinner设置适配器:

private fun setUpSpinner(){
    val spinnerAdapter = ServiceSpinnerAdapter(context!!, Constants.spinnerTitles)
    mSpinner.adapter = spinnerAdapter
    mSpinner.gravity = Gravity.CENTER_HORIZONTAL
}

ServiceSpinnerAdapter

class ServiceSpinnerAdapter : SpinnerAdapter {
    private var mContext: Context
    lateinit var imageView: ImageView
    private var mList = mutableListOf<String>()

    constructor(context: Context, list: MutableList<String>) {
        this.mContext = context
        this.mList = list
    }

    override fun registerDataSetObserver(observer: DataSetObserver?) {}
    override fun unregisterDataSetObserver(observer: DataSetObserver?) {}
    override fun getCount(): Int {
        return mList.size
    }

    override fun getItem(position: Int): Any {
        return mList[position]
    }

    override fun getItemId(position: Int): Long {
        return position.toLong()
    }

    override fun hasStableIds(): Boolean {
        return false
    }

	/**
	     * Spinner收起时的布局
	     * 可以自定义文字 箭头图片什么的
	     * */
    override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val rootView = LayoutInflater
                .from(parent!!.context).inflate(R.layout.layout_expert_spinner_default, parent, false)

        val textView = rootView.findViewById<TextView>(R.id.spinner_title)
        textView.text = mList[position]

        imageView = rootView.findViewById<ImageView>(R.id.iv_down_arrow)

        val lp = rootView.layoutParams
        lp.width = ScreenUtil.getScreenWidth(mContext) /2
        lp.height = ScreenUtil.dpToPx(35)
        rootView.layoutParams = lp

        return rootView
    }

    override fun getItemViewType(position: Int): Int {
        return 1
    }

    override fun getViewTypeCount(): Int {
        return 1
    }

    override fun isEmpty(): Boolean {
        return false
    }

	/**
	     * Spinner展开时的item布局
	     * */
    override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup?): View {
        val rootView = LayoutInflater
                .from(parent!!.context).inflate(R.layout.layout_expert_spinner_drop_down, parent, false)

        val textView = rootView.findViewById<TextView>(R.id.spinner_title)
        textView.text = mList[position]

        val lp = rootView.layoutParams
        lp.width = ScreenUtil.getScreenWidth(mContext) /2
        lp.height = ScreenUtil.dpToPx(35)
        rootView.layoutParams = lp

        return rootView
    }
}

布局layout_expert_spinner_default

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/dp35"
    android:gravity="center">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:textSize="@dimen/sp14"
        android:textColor="@color/expertAreaTextColor"
        android:text="服务领域"
        android:gravity="center"
        android:id="@+id/spinner_title"/>

    <ImageView
        android:id="@+id/iv_down_arrow"
        android:layout_width="@dimen/dp16"
        android:layout_height="@dimen/dp16"
        android:scaleType="fitXY"
        android:src="@mipmap/icon_down_arrow"
        android:layout_marginStart="@dimen/dp15"/>

</LinearLayout>

布局layout_expert_spinner_drop_down

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/dp35"
    android:textSize="@dimen/sp14"
    android:textColor="@color/expertAreaTextColor"
    android:text="服务领域"
    android:gravity="center"
    android:id="@+id/spinner_title"
    android:background="@drawable/selector_spinner_drop_down">
</TextView>

Spinner下拉列表的选中事件

mSpinner.onItemSelectedListener = object: AdapterView.OnItemSelectedListener{
            override fun onNothingSelected(parent: AdapterView<*>?) {

            }
            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {

            }

        }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值