Android Kotlin仿iOS底部选择框
先看下使用方式:
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底部选择框相关推荐
- android 仿ios 底部弹出,项目需求讨论-仿ios底部弹框实现及分析
hi,在项目开发中,有时候需要仿照ios的底部弹框做效果,比如我们在iPhone上面关闭定位的时候,就会弹出ios特有的底部弹框: 屏幕快照 2017-10-09 08.20.30 PM.png 弹框 ...
- android 仿照ios 图片选择,GitHub - wildma/PictureSelector: Android 图片选择器(仿 IOS 图片选择控件)...
PictureSelector Android 图片选择器(仿 IOS 图片选择控件) 效果图 功能特点 支持通过拍照获取图片 支持通过相册获取图片 支持图片是否裁剪两种场景 支持仿 IOS 底部弹出 ...
- Android安卓仿IOS音量调节-自定义view系列(4)
Android安卓仿IOS音量调节-自定义view系列 功能简介 主要实现步骤 xml相关属性设置 java代码 Android技术生活交流 更多其他页面-自定义View-实用功能合集:点击查看 Gi ...
- Android高仿iOS Messages录音操作按钮
Android高仿iOS Messages录音操作按钮 目录 一.目标 二.功能分析 三.实现效果 四.实现过程 五.开发过程回顾 六.接下来 七.Finally 前面的2次开发,分别完成了实现录音和 ...
- android 仿简书评论,Android 开发仿简书登录框可删除内容或显示密码框的内容
简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...
- Android点击按钮显示密码,Android 开发仿简书登录框可删除内容或显示密码框的内容...
简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. package lyf.myimgedit ...
- Android高仿iOS Messages聊天气泡
Android高仿iOS Messages聊天气泡 一.目标 二.功能分析 三.实现代码 1. ChatItem 2. DateItem 3. TextItem 4. PhotoItem 5. Cha ...
- android菊花动画,Android实现仿iOS菊花加载圈动画效果
常见的实现方式 切图,做旋转动画 自定义View,绘制效果 gif图 1.切图会增加体积,但相对简单,不过在换肤的场景下,会使用不同颜色,需要准备多张图,不够灵活. 2.由于自定义的好处,不同颜色只需 ...
- android高仿ios控制中心,高仿ios控制中心安卓版
高仿ios控制中心安卓版是一款非常好用的安卓仿苹果手机控制中心的软件,能够让使用安卓手机的朋友们随时体验苹果手机的系统,操作简单方便,软件也是非常稳定的,大家可放心的下载使用,感兴趣的用户们就前来下载 ...
最新文章
- AI一分钟 | 浙大研发出“踢不倒”的四足机器人;富士康冲击A股上市,AI为最大卖点
- 面向对象设计原则之三:里氏替换原则
- 参数调整 新部署rac_详解Oracle数据库RAC架构性能优化--参数设置+优化设计
- python关于文件的一些记录
- php http agent,PHP通过http头user-agent判断是否为手机浏览器
- 使用截图工具FastStone Capture
- Python语言应该加上块标识(开始、结束)的特性
- SFM图像三维重建(二)
- 基于遗传算法的新安江模型参数优化率定(二)
- 中风后下肢麻木瘀阻案
- 活动现场大屏幕互动系统源码,包含3D签到投票抽奖等功能
- 企业向SDN和NFV转型的最大阻碍是CXO们?
- 微信H5移动端真机调试--vConsole
- 《数据库系统》(六)存储管理
- InsightFace又出新作!合成更真实更多样近红外人脸图片,助力“近红外-可见光”跨域人脸识别...
- 【小程序源码】圣诞节头像框制作生成支持多模板
- 2018-2019-1 20189206 《Linux内核原理与分析》第五周作业
- 易信公众平台开发从入门到精通之接收普通消息
- Zemax学习笔记——多重结构配置的激光扩束镜
- Java学习:java枚举实例
热门文章
- anovan matlab,matlab函数之anova用法
- oracle utl_http.request,通过ORACLE的UTL_HTTP工具包发送包含POST参数的请求
- 为何应用型本科(机器人工程等专业)大量学生选择考研
- HDOJ---1431 素数回文[素数筛选+ltoa函数(将长整形转换成字符数组)+打表]
- 趣图:沙雕用户的日常
- 【开源“青女四轴”,DIY小四轴】
- 计算机控制点火系统检修,《发动机电控技术》教学教案:计算机控制点火系统的组成及工作原理...
- java 文件 上传 下载
- 不懂编程?节点包来凑——Dynamo常用节点包推荐(下)
- Android12之OpenSL ES中IObject_Realize和CEngine_Realize区别(十四)