1、简介
我们日常开发中,时常需要进行筛选类别,而我们大家都有用过Android自带的Spinner控件吧,是否都很厌恶,而且是特别的不好看,开源社区上也有Material化的Spinner还是不错的。今天我将向大家介绍的是我参照社区的DropDown修改的下拉选择列表控件。社区上的写的很好,不过在使用上我想让主体VIew置于半透明的窗体下,而不至于被布局顶出去。所以我就基于此进行了修改。
2、效果
下面是我在项目中的运行效果图。
3、控件介绍
首先了解一下控件的显示组成结构,如下图所有,对于弹出列表收缩的情况,该界面只包含有头布局和内容显示的主体View,而对于有选择列表弹出的情况,那么首先会在内容显示区域上覆盖一层半透明的背景,然后会在之上再显示弹出的可供选择的列表。就是这么个思路,然后再辅助以一定的动画即可完成该种效果。
4、具体实现
该自定义View是集成自RelativeLayout的,其主体的布局如下代码所示,也是分为头和主体的两部分的。布局中有对应的注释。
view_ddv_drop_down.xml
<?xml version="1.0" encoding="utf-8"?>
<!--
<merge /> 标签来减少视图层级结构
在Android layout文件中需要一个顶级容器来容纳其他的组件,而不能直接放置多个组件
目的是通过删减多余或者额外的层级,从而优化整个Android Layout的结构。
直接作用在父布局之下 也就是 RelativeLayout
如下面的 tools:parentTag = "android.widget.RelativeLayout" 就是很好的解释
-->
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:parentTag="android.widget.RelativeLayout">
<LinearLayout
android:id="@+id/drop_down_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:orientation="vertical">
<!-- 控件的头 -->
<RelativeLayout
android:id="@+id/drop_down_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/dDVColorPrimary"
android:gravity="center">
<!-- Will have one child for Header/Collapsed View -->
</RelativeLayout>
<!-- 内容主体View-->
<FrameLayout
android:id="@+id/fmContainer"
android:layout_width="match_parent"
android:layout_height="match_parent">
</FrameLayout>
</LinearLayout>
</merge>
接下来时