当前位置: 首页 > wzjs >正文

郑州网站优化公司机票网站开发知乎

郑州网站优化公司,机票网站开发知乎,企业电商网站备案流程,山东做网站建设公司本文将详细介绍如何使用DialogX库实现一个iOS风格的底部弹窗,包含图标、文本和Toggle开关的列表项。 实现步骤 1. 添加依赖 在build.gradle文件中添加: implementation com.github.kongzue.DialogX:DialogX:0.0.49.beta14 implementation com.github.ko…

本文将详细介绍如何使用DialogX库实现一个iOS风格的底部弹窗,包含图标文本Toggle开关的列表项。
实现步骤
1. 添加依赖
build.gradle文件中添加:

implementation 'com.github.kongzue.DialogX:DialogX:0.0.49.beta14'
implementation 'com.github.kongzue.DialogX:DialogXIOSStyle:0.0.49.beta14'
implementation 'androidx.recyclerview:recyclerview:1.3.2'

2. 创建布局文件
底部弹窗主布局 (dialog_bottom_toggle.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"android:background="@drawable/bg_bottom_dialog_round_top"><TextViewandroid:id="@+id/tv_title"android:layout_width="match_parent"android:layout_height="wrap_content"android:padding="16dp"android:textSize="18sp"android:textStyle="bold"/><androidx.recyclerview.widget.RecyclerViewandroid:id="@+id/recyclerView"android:layout_width="match_parent"android:layout_height="wrap_content"android:maxHeight="400dp"/><Buttonandroid:id="@+id/btn_cancel"android:layout_width="match_parent"android:layout_height="48dp"android:text="取消"android:background="?attr/selectableItemBackground"/>
</LinearLayout>

列表项布局 (item_toggle.xml)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="56dp"android:orientation="horizontal"android:paddingStart="24dp"android:paddingEnd="16dp"android:gravity="center_vertical"><ImageViewandroid:id="@+id/iv_icon"android:layout_width="24dp"android:layout_height="24dp"android:layout_marginEnd="16dp"/><TextViewandroid:id="@+id/tv_title"android:layout_width="0dp"android:layout_height="wrap_content"android:layout_weight="1"android:textSize="16sp"/><androidx.appcompat.widget.SwitchCompatandroid:id="@+id/switch_toggle"android:layout_width="wrap_content"android:layout_height="wrap_content"/>
</LinearLayout>

3. 实现工具类

import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.ImageView
import android.widget.TextView
import androidx.appcompat.widget.SwitchCompat
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import com.kongzue.dialogx.dialogs.CustomDialog
import com.kongzue.dialogx.interfaces.OnBindView
import com.kongzue.dialogx.style.IOSStyle
import smartconnection.com.smartconnect.Robject BottomToggleDialog {data class ToggleItem(val iconRes: Int,val title: String,var isChecked: Boolean = false,val onToggleChanged: ((Boolean) -> Unit)? = null)/*** 使用CustomDialog的可靠实现*/fun show(context: Context,title: String? = null,items: List<ToggleItem>) {CustomDialog.build().setCustomView(object : OnBindView<CustomDialog>(R.layout.dialog_bottom_toggle) {override fun onBind(dialog: CustomDialog?, view: View?) {view?.apply {// 绑定视图val recyclerView = findViewById<RecyclerView>(R.id.recyclerView)val tvTitle = findViewById<TextView>(R.id.tv_title)val btnCancel = findViewById<Button>(R.id.btn_cancel)// 设置标题title?.let { tvTitle.text = it } ?: run { tvTitle.visibility = View.GONE }// 配置列表recyclerView.layoutManager = LinearLayoutManager(context)recyclerView.adapter = ToggleAdapter(items).apply {onItemClick = { position, isChecked ->items[position].isChecked = isCheckeditems[position].onToggleChanged?.invoke(isChecked)}}// 取消按钮btnCancel.setOnClickListener { dialog?.dismiss() }}}}).setStyle(IOSStyle.style()).setAlign(CustomDialog.ALIGN.BOTTOM).setCancelable(true).show()}private class ToggleAdapter(private val items: List<ToggleItem>) :RecyclerView.Adapter<ToggleAdapter.ViewHolder>() {var onItemClick: ((Int, Boolean) -> Unit)? = nullclass ViewHolder(view: View) : RecyclerView.ViewHolder(view) {val ivIcon: ImageView = view.findViewById(R.id.iv_icon)val tvTitle: TextView = view.findViewById(R.id.tv_title)val switch: SwitchCompat = view.findViewById(R.id.switch_toggle)}override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {val view = LayoutInflater.from(parent.context).inflate(R.layout.item_toggle, parent, false)return ViewHolder(view)}override fun onBindViewHolder(holder: ViewHolder, position: Int) {val item = items[position]holder.ivIcon.setImageResource(item.iconRes)holder.tvTitle.text = item.titleholder.switch.isChecked = item.isCheckedholder.switch.setOnCheckedChangeListener { _, isChecked ->onItemClick?.invoke(position, isChecked)}holder.itemView.setOnClickListener {holder.switch.toggle()}}override fun getItemCount() = items.size}
}

使用示例

// 准备数据
val items = listOf(BottomToggleDialog.ToggleItem(iconRes = R.drawable.ic_notification,title = "消息通知",isChecked = true) { isChecked ->Toast.makeText(this, "通知状态: $isChecked", Toast.LENGTH_SHORT).show()},BottomToggleDialog.ToggleItem(iconRes = R.drawable.ic_dark_mode,title = "暗黑模式",isChecked = false) { isChecked ->Toast.makeText(this, "暗黑模式: $isChecked", Toast.LENGTH_SHORT).show()}
)// 显示弹窗
BottomToggleDialog.show(context = this,title = "功能设置",items = items
)

关键点说明
1.底部显示控制:

setAlignBottom() 确保内容对齐底部

自定义动画实现滑动效果

顶部圆角背景优化视觉效果

2.数据绑定:

使用RecyclerView实现高效列表

通过回调处理Toggle状态变化


文章转载自:

http://SPnqnmYn.srjgz.cn
http://LvDkWQUT.srjgz.cn
http://tHb0UCW2.srjgz.cn
http://WGEl5QmC.srjgz.cn
http://xZttHjPI.srjgz.cn
http://vrAqiOed.srjgz.cn
http://z9XprvAx.srjgz.cn
http://EjmGBKAi.srjgz.cn
http://Gs0twjo9.srjgz.cn
http://FL5iW8Yp.srjgz.cn
http://4vmYFj8f.srjgz.cn
http://3qmbTcEI.srjgz.cn
http://DOsQH7cg.srjgz.cn
http://RkhzorSb.srjgz.cn
http://J9uGpQC6.srjgz.cn
http://zJqOpnuV.srjgz.cn
http://t5jj0O6B.srjgz.cn
http://5WEpUcCg.srjgz.cn
http://ZBJ2v92l.srjgz.cn
http://nNrgdC3Q.srjgz.cn
http://h4JbPuk6.srjgz.cn
http://gmvcrhNW.srjgz.cn
http://ShgHDaR3.srjgz.cn
http://iR4bw3bA.srjgz.cn
http://7xWObW9G.srjgz.cn
http://YDKXgE2Z.srjgz.cn
http://eACw0PdL.srjgz.cn
http://9Y8rr4f2.srjgz.cn
http://uDbeLAEJ.srjgz.cn
http://98Rr5aEk.srjgz.cn
http://www.dtcms.com/wzjs/754536.html

相关文章:

  • 天津高端网站建设案例wordpress硬件条件
  • 建设银行联号查询网站安全员考试成绩查询网
  • 哪里创建免费个人网站网站集约化建设要求
  • 做平台好还是自己建网站jsp怎样做网站
  • 网站只做静态页面安全受到影响建设网站素材
  • 动态公司网站设计简约商务ppt模板免费下载
  • 亚马逊deal网站怎么做哪个网站可以在线做高考题
  • 文明网站建设wordpress推送百度
  • 哪家做网站公司好wordpress设置教程
  • 网站负责人 备案在线网站建设询问报价
  • html仿淘宝首页电子商务网站首页做网站 空间
  • 汉中做网站的电话网站seo在线检测
  • 做类似于58同城的网站莆田网站制作企业
  • 河南双师培训网站怎么打开wordpress后台
  • 无为县做互联网网站免费个人域名网站
  • 后台控制网站关键词设置的详细代码沈阳网站建设求职简历
  • 响应式网站建设报价单网站建设对企业品牌价值提升的影响
  • 企业网站视频栏目建设方案百度云服务器一年多少钱
  • wp网站打开太慢怎么做优化电子商务企业网站建设规划
  • 网站备案vpn注销网络服务器租赁费一般多少钱
  • wordpress 微媒体插件济南网站seo优化
  • 做网站和做软件哪个赚钱哪几个做内贸的网站比较好一点
  • 深圳网站开发一薇dede手机网站更新
  • 湖北襄阳网站建设怎么做链接网站
  • 盗qq的钓鱼网站怎么做如何创建商业网站
  • 乐趣公园 wordpress宁波企业网站排名优化公司
  • 自己做网站需要买哪些东西国家企业信用信息公示系统官网山东
  • 在合肥做网站前端月薪大概多少钱外贸网站推广外包
  • 在线购物的网站制作网站的论文怎么写
  • 汽车租赁网站设计mvc5网站开发之美电子版