Android UI之实现Material化的下拉选择列表拒绝丑陋的Spinner

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>

接下来时

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值