先看下使用方式:

DialogFunction(data = listOf("相册","拍照")
) { position, _ ->setListener(baseActivity)when (position) {0 -> {//选择相册}1 -> {//拍照}}
}.show(activity.supportFragmentManager, "showPhotoDialog")

源码:继承自DialogFragment

/*** 功能选择弹窗* 比如:拍照/选择照片**/
class DialogFunction(private val data: List<String>,private val itemClickListener: (position: Int, bean: String) -> Unit
) : DialogFragment() {override fun onStart() {super.onStart()dialog?.window?.apply {setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)setBackgroundDrawable(ColorDrawable(Color.TRANSPARENT))setGravity(Gravity.BOTTOM)}}override fun show(manager: FragmentManager, tag: String?) {val t = manager.beginTransaction()val f = manager.findFragmentByTag(tag)if (f != null) {t.remove(f)}t.commit()super.show(manager, tag)}override fun onCreateView(inflater: LayoutInflater,container: ViewGroup?,savedInstanceState: Bundle?): View? {return inflater.inflate(R.layout.dialog_function, container, false)}@SuppressLint("UseCompatLoadingForDrawables")override fun onViewCreated(view: View, savedInstanceState: Bundle?) {super.onViewCreated(view, savedInstanceState)val tvFuncCancel = view.findViewById<TextView>(R.id.tv_func_cancel)val recyclerView = view.findViewById<RecyclerView>(R.id.rv_func)tvFuncCancel.setOnClickListener {dismiss()}val divider = LinearDecoration(this.requireContext(),DividerItemDecoration.VERTICAL)view.context.resources.getDrawable(R.drawable.shape_divider,null)?.let { divider.setDrawable(it) }recyclerView.addItemDecoration(divider)recyclerView.adapter = FuncAdapter(data) { position, bean ->itemClickListener.invoke(position, bean)dismiss()}}
}class FuncAdapter(private val data: List<String>,private val itemClickListener: (position: Int, bean: String) -> Unit
) : RecyclerView.Adapter<FuncAdapter.FuncVH>() {inner class FuncVH(itemView: View) : RecyclerView.ViewHolder(itemView) {private val tv = itemView.findViewById<TextView>(R.id.tv_item_func)fun bind(s: String, position: Int) {tv.text = stv.setOnClickListener {itemClickListener.invoke(position, s)}}}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): FuncVH {return FuncVH(LayoutInflater.from(parent.context).inflate(R.layout.item_dialog_func, parent, false))}override fun onBindViewHolder(holder: FuncVH, position: Int) {holder.bind(data[position], position)}override fun getItemCount(): Int {return data.size}
}

分割线:shape_divider.xml

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"android:shape="rectangle"><solid android:color="#1AFFFFFF" /><sizeandroid:width="3dp"android:height="0.5dp" /></shape>

布局:dialog_function.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout 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"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginStart="8dp"android:layout_marginEnd="8dp"android:orientation="vertical"tools:viewBindingIgnore="true"><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/rv_func"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@drawable/shape_corner14_gray1"app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"tools:itemCount="8"tools:listitem="@layout/item_dialog_func" /><TextViewandroid:id="@+id/tv_func_cancel"android:layout_width="match_parent"android:layout_height="56dp"android:layout_marginTop="8dp"android:background="@drawable/shape_corner14_gray2"android:gravity="center"android:text="取消"android:textColor="@color/theme_main_color"android:textSize="20sp" /></LinearLayout>

子布局:item_dialog_func.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="56dp"android:gravity="center"android:orientation="vertical"><TextViewandroid:id="@+id/tv_item_func"android:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="center"android:textColor="#ffffff"android:textSize="20sp"tools:text="man" /></LinearLayout>

Android Kotlin仿iOS底部选择框相关推荐

  1. android 仿ios 底部弹出,项目需求讨论-仿ios底部弹框实现及分析

    hi,在项目开发中,有时候需要仿照ios的底部弹框做效果,比如我们在iPhone上面关闭定位的时候,就会弹出ios特有的底部弹框: 屏幕快照 2017-10-09 08.20.30 PM.png 弹框 ...

  2. android 仿照ios 图片选择,GitHub - wildma/PictureSelector: Android 图片选择器(仿 IOS 图片选择控件)...

    PictureSelector Android 图片选择器(仿 IOS 图片选择控件) 效果图 功能特点 支持通过拍照获取图片 支持通过相册获取图片 支持图片是否裁剪两种场景 支持仿 IOS 底部弹出 ...

  3. Android安卓仿IOS音量调节-自定义view系列(4)

    Android安卓仿IOS音量调节-自定义view系列 功能简介 主要实现步骤 xml相关属性设置 java代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击查看 Gi ...

  4. Android高仿iOS Messages录音操作按钮

    Android高仿iOS Messages录音操作按钮 目录 一.目标 二.功能分析 三.实现效果 四.实现过程 五.开发过程回顾 六.接下来 七.Finally 前面的2次开发,分别完成了实现录音和 ...

  5. android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  6. Android点击按钮显示密码,Android 开发仿简书登录框可删除内容或显示密码框的内容...

    简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...

  7. Android高仿iOS Messages聊天气泡

    Android高仿iOS Messages聊天气泡 一.目标 二.功能分析 三.实现代码 1. ChatItem 2. DateItem 3. TextItem 4. PhotoItem 5. Cha ...

  8. android菊花动画,Android实现仿iOS菊花加载圈动画效果

    常见的实现方式 切图,做旋转动画 自定义View,绘制效果 gif图 1.切图会增加体积,但相对简单,不过在换肤的场景下,会使用不同颜色,需要准备多张图,不够灵活. 2.由于自定义的好处,不同颜色只需 ...

  9. android高仿ios控制中心,高仿ios控制中心安卓版

    高仿ios控制中心安卓版是一款非常好用的安卓仿苹果手机控制中心的软件,能够让使用安卓手机的朋友们随时体验苹果手机的系统,操作简单方便,软件也是非常稳定的,大家可放心的下载使用,感兴趣的用户们就前来下载 ...

最新文章

  1. AI一分钟 | 浙大研发出“踢不倒”的四足机器人;富士康冲击A股上市,AI为最大卖点
  2. 面向对象设计原则之三:里氏替换原则
  3. 参数调整 新部署rac_详解Oracle数据库RAC架构性能优化--参数设置+优化设计
  4. python关于文件的一些记录
  5. php http agent,PHP通过http头user-agent判断是否为手机浏览器
  6. 使用截图工具FastStone Capture
  7. Python语言应该加上块标识(开始、结束)的特性
  8. SFM图像三维重建(二)
  9. 基于遗传算法的新安江模型参数优化率定(二)
  10. 中风后下肢麻木瘀阻案
  11. 活动现场大屏幕互动系统源码,包含3D签到投票抽奖等功能
  12. 企业向SDN和NFV转型的最大阻碍是CXO们?
  13. 微信H5移动端真机调试--vConsole
  14. 《数据库系统》(六)存储管理
  15. InsightFace又出新作!合成更真实更多样近红外人脸图片,助力“近红外-可见光”跨域人脸识别...
  16. 【小程序源码】圣诞节头像框制作生成支持多模板
  17. 2018-2019-1 20189206 《Linux内核原理与分析》第五周作业
  18. 易信公众平台开发从入门到精通之接收普通消息
  19. Zemax学习笔记——多重结构配置的激光扩束镜
  20. Java学习:java枚举实例

热门文章

  1. anovan matlab,matlab函数之anova用法
  2. oracle utl_http.request,通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求
  3. 为何应用型本科(机器人工程等专业)大量学生选择考研
  4. HDOJ---1431 素数回文[素数筛选+ltoa函数(将长整形转换成字符数组)+打表]
  5. 趣图:沙雕用户的日常
  6. 【开源“青女四轴”,DIY小四轴】
  7. 计算机控制点火系统检修,《发动机电控技术》教学教案:计算机控制点火系统的组成及工作原理...
  8. java 文件 上传 下载
  9. 不懂编程?节点包来凑——Dynamo常用节点包推荐(下)
  10. Android12之OpenSL ES中IObject_Realize和CEngine_Realize区别(十四)