• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >Android > Android Bottom Sheet详解

Android Bottom Sheet详解

作者:网友 字体:[增加 减小] 来源:互联网 时间:2017-05-26

网友通过本文主要向大家介绍了android bottomsheet,bottomsheetdialog,bottom sheet,bottomsheetbehavior,bottomsheetlayout等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

Android Bottom Sheet详解


最近android更新了support library, 版本到了23.2, 从官方blog中我们还是可以看到几个令人心动的特性的,例如夜间模式的支持,BottomSheet.今天我们就来介绍一下这个Bottom Sheet,这可能会给我们开发中需要的一些效果带来便利.

虽然这里我们准备用整整一篇博客的时间来介绍它,不过这东西使用起来太简单了也太方便了,这还要感谢Behavior机制的引入,我记得在博客源码看CoordinatorLayout.Behavior原理中说过,Behavior其实是CoordinatorLayout
的核心内容,Behavior允许我们在不用自定义控件的前提下实现一些效果,Bottom Sheet正是通过Behavior实现的.

首先我们来看一个效果,

\

这个效果的实现很简单,甚至基本不需要java代码,我们只需要给我们的下面的这个可滑动<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPrXEdmlld9K7uPZiZWhhdmlvcr7Nb2sssNHV4rj2YmVoYXZpb3LWuLaozqo8Y29kZT5hbmRyb2lkLnN1cHBvcnQuZGVzaWduLndpZGdldC5Cb3R0b21TaGVldEJlaGF2aW9yPC9jb2RlPr7Nv8nS1LTvtb3V4tbW0Ke5+8HLLMrHsrvKx7rcvPK1pT8gwLS/tL+0tPrC67DJLDwvcD4NCjxwcmUgY2xhc3M9"brush:java;"> windows="true" android:layout_height="match_parent" android:layout_width="match_parent" tools:context="org.loader.bottomsheetmodule.MainActivity" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools">

看到NestedScrollView的behavior了吗? 我们仅仅指定了一下他的值就可以了,其他的地方没有任何特殊的.
虽然说我们不需要任何java代码就可以实现,不过这里我们还是希望可以通过按钮去控制它,从底部滑出毕竟太隐藏了,没有几个人可以猜到.

public void intro(View view) {
    BottomSheetBehavior behavior = BottomSheetBehavior.from(findViewById(R.id.scroll));
    if(behavior.getState() == BottomSheetBehavior.STATE_EXPANDED) {
        behavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
    }else {
        behavior.setState(BottomSheetBehavior.STATE_EXPANDED);
    }
}

代码也很简单,首先我们从NestedScrollView上获取到他的Behavior,因为我们知道是 BottomSheetBehavior,所以这里直接死用BottomSheetBehavior.from方法来获取,然后通过getState方法来判断现在的状态,如果是展开的状态,我们就让它收缩起来,反之,展开它.

我们还可以给BottomSheetBehavior一个callback来监听状态,

behavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() {
    @Override
    public void onStateChanged(@NonNull View bottomSheet, int newState) {

    }

    @Override
    public void onSlide(@NonNull View bottomSheet, float slideOffset) {

    }
});

这个确实简单,不过有没有发现它的用户不是那么的广,接下来我们就要来介绍一个用户相对来说广泛点的BottomSheetDialog,这个Dialog可以实现什么效果呢? 举个例子吧,现在我们在商城相关的app,当我们点击购买的时候需要选择一下要购买的商品的属性,以前我们可能是在底部弹出一个Popupwindow来实现,现在好了,我们可以利用BottomSheetDialog轻松的实现这个功能了.首先继续来看看效果吧.

\

这里是一个含有一个List的dialog,当我们点击按钮显示的时候,它会出现一部分,当我们拖动它的时候,他会占满屏幕,现在我们就来看一下代码如何实现,

public void select(View view) {
    RecyclerView recyclerView = (RecyclerView) LayoutInflater.from(this)
            .inflate(R.layout.list, null);
    recyclerView.setItemAnimator(new DefaultItemAnimator());
    recyclerView.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    Adapter adapter = new Adapter();
    recyclerView.setAdapter(adapter);

    final BottomSheetDialog dialog = new BottomSheetDialog(this);
    dialog.setContentView(recyclerView);
    dialog.show();
    adapter.setOnItemClickListener(new Adapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position, String text) {
            Toast.makeText(MainActivity.this, text, Toast.LENGTH_SHORT).show();
            dialog.dismiss();
        }
    });
}

static class Adapter extends RecyclerView.Adapter {

    private OnItemClickListener mItemClickListener;

    public void setOnItemClickListener(OnItemClickListener li) {
        mItemClickListener = li;
    }

    @Override
    public Adapter.Holder onCreateViewHolder(ViewGroup parent, int viewType) {
        View item = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
        return new Holder(item);
    }

    @Override
    public void onBindViewHolder(final Adapter.Holder holder, int position) {
        holder.tv.setText("item " + position);
        if(mItemClickListener != null) {
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mItemClickListener.onItemClick(holder.getLayoutPosition(),
                            holder.tv.getText().toString());
                }
            });
        }
    }

    @Override
    public int getItemCount() {
        return 50;
    }

    class Holder extends RecyclerView.ViewHolder {
        TextView tv;
        public Holder(View itemView) {
            super(itemView);
            tv = (TextView) itemView.findViewById(R.id.text);
        }
    }

    interface OnItemClickListener {
        void onItemClick(int position, String text);
    }
}

别看代码长,主要是Adapter的代码!而且没有任何难度!我们来看select方法,这个方法中我们通过LayoutInflater加载了一个布局,这个布局很简单,就是一个RecyclerView.接下来的几行代码是配置RecyclerView和它的Adapter,相信不用多说大家也已经很熟悉了.关键是继续往下的3行代码,首先我们new了一个BottomSheetDialog,然后通过setContentView方法把我们inflate进来的布局设置到这个dialog上,最后调用dialog的show方法将dialog显示出来,这个效果就是这么容易就实现了,这个dialog特性的代码我们一行也没有写,android都已经帮我们完成好了.最后我们还在item的click事件中将这个dialog隐藏掉了.

好了,今天这篇博客很简单,主要是最新的support包中这个bottomSheet的使用,以后大家在项目中又可以多一种实现dialog的方式了, 赶紧尝试一下吧.

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Android Bottom Sheet详解
  • Bottom Sheet

相关文章

  • 2017-05-222.2.2 RelativeLayout(相对布局)
  • 2017-05-26第3章 用C#编写百度地图Android手机应用程序(第5讲),
  • 2017-05-26Android用Intent来启动Service报“java.lang.IllegalArgumentException: Service Intent must be explicit”错误的解决方法,explicitintent
  • 2017-05-26Android的开机流程及对应源码位置分析,android源码
  • 2017-05-26Android的系统体系结构,android体系结构
  • 2017-05-26svn环境搭建(不同目录、设置不同的权限)
  • 2017-05-26[android] 手机卫士设备管理权限锁屏,android锁屏
  • 2017-05-26Android中对Handle机制的理解
  • 2017-05-26Android中View的滑动冲突——Android开发艺术探索笔记
  • 2017-05-26上传单个文件到多台机器工具

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • Android学习笔记(28):三种选择器DatePicker_TimePicker_NumberPicker剖析
    • ViewPager结合Fragment进行无限滑动,viewpagerfragment
    • 手机安全卫士——通讯卫士-黑名单的管理,安全卫士卫士
    • Android进程通信之两种序列化方式分析
    • 2016年Android市场的8个大胆预测,2016年android
    • Android键盘事件,android键盘
    • 【转载】ReactiveX 的理念和特点,转载reactivex理念
    • android 滑动冲突的处理
    • Android开发10:传感器器及地图相关应用,android传感器
    • dpdk内存管理——内存初始化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有