4. 弹窗动画设计(pw_bottom_ 与 pw_bottom_)(四)数据存储与加载1. 数据存储( 与 )// 搜索引擎的数据实体类,包含名称和 icon 资源 id 两个属性data class SearchEngine( val title : String, val res : Int)以字符串数组的形式存储搜索引擎的名称以及对应的图标资源百度搜狗360必应神马@drawable/ic_baidu@drawable/ic_sougou@drawable/ic_360@drawable/ic_bing@drawable/ic_shenma2. 数据加载()private lateinit var engines : MutableListprivate fun initData() { // 初始化引擎列表 engines = mutableListOf() // 从 获取引擎名称数组 val titleList = ingArray(_engine_title_list) // 由于资源 id 是整型,但是在 中存储的是字符串, // 所以这⾥先初始化⼀个资源 id 的数组,元素类型为整型 val iconResList : MutableList = mutableListOf() // 通过类型数组加载相关引擎资源列表,遍历其中元素,传⼊索引值, // 通过调⽤ getResourceId(index,0) 获取 icon 的资源 id 存⼊刚才初始化的 id 数组中 val resList: TypedArray =
TypedArray(_engine_res_list) for (index in 0 until ()) { (ourceId(index,0)) } // 记得及时调⽤ recycle() 回收 TypedArray 对象 e() // 循环,⽤获得的 title 和 id ⽣成对应的搜索引擎对象,存⼊搜索引擎列表中 for (index in s){ if (index < ){ (SearchEngine(titleList[index],iconResList[index])) } }}(五)剩余内容上述提及的内容代码,此处将不再进⾏展⽰;因为重点是介绍底部弹窗的实现,弹窗布局中的 RecyclerView 的实现就不过多介绍1. 弹窗列表适配器class AdapterForSearchEngine (dataList: MutableList) : r() { // 搜索引擎数据集合 private val mDataList: MutableList = mutableListOf() init { // 初始化 主要是对数据进⾏初始化 () (dataList) } // ViewHolder ⽅便 item 复⽤ class ViewHolder(view: View) : lder(view) {} // 获取列表 item 数量 override fun getItemCount(): Int { return }
// 绑定视图与数据 override fun onBindViewHolder(holder: ViewHolder, position: Int) { val engine: SearchEngine = mDataList[position] = geResource() lickListener { listener?.click(engine) } } // 创建 ViewHolder 实例 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view: View = (t).inflate(_search_engine, parent, false) return ViewHolder(view) } // 点击事件 private var listener :OnItemClickListener? = null interface OnItemClickListener { fun click(engine: SearchEngine) } fun setOnItemClickListener(listener: OnItemClickListener) { er = listener }}2. s MainActivity : AppCompatActivity() { private lateinit var engines : MutableList private lateinit var popupWindow : PopupWindow private lateinit var pwView : View private lateinit var mAdapter : AdapterForSearchEngine override fun onCreate(savedInstanceState: Bundle?) { te(savedInstanceState) setContentView(ty_main) // 初始化数据 initData() // 初始化 PopupWindow initPopupWindow() // 按钮点击事件 lickListener { // 显⽰弹窗 showPopWindow() } } private fun initPopupWindow() { // 加载弹窗布局 pwView = (this).inflate(_search_engine, null, false) // 实例化 PopupWindow popupWindow = PopupWindow( pwView, _PARENT, _CONTENT ) // 初始化弹窗列表 initRecyclerView() // 设置 popupWindow ideTouchable = true hable = true sable = true // 加载弹窗动画 ionStyle = _bottom_anim_style // 设置弹窗关闭监听——恢复亮度 ismissListener { backgroundAlpha(1f) } } private fun showPopWindow() { val rootView = (this).inflate( ty_main, null ) // 设置弹窗位置 Location(rootView, , 0, 0) // 使得背景亮度变暗 backgroundAlpha(0.7f) } // 控制背景亮度 private fun backgroundAlpha(bgAlpha: Float) { val lp = utes = bgAlpha //0.0-1.0 utes = lp } private fun initRecyclerView() { mAdapter = AdapterForSearchEngine(engines) erView?.adapter = mAdapter temClickListener(object : ClickListener{ override fun click(engine: SearchEngine) { xt(this@MainActivity, , _SHORT).show() s() } }) } private fun initData() { // 初始化引擎列表 engines = mutableListOf() // 从 获取引擎名称数组 val titleList = ingArray(_engine_title_list) // 由于资源 id 是整型,但是在 中存储的是字符串, // 所以这⾥先初始化⼀个资源 id 的数组,元素类型为整型 val iconResList : MutableList = mutableListOf() // 通过类型数组加载相关引擎资源列表,遍历其中元素,传⼊索引值, // 通过调⽤ getResourceId(index,0) 获取 icon 的资源 id 存⼊刚才初始化的 id 数组中 val resList: TypedArray = TypedArray(_engine_res_list) for (index in 0 until ()) { (ourceId(index,0)) } // 记得及时调⽤ recycle() 回收 TypedArray 对象 e() // 循环,⽤获得的 title 和 id ⽣成对应的搜索引擎对象,存⼊搜索引擎列表中 for (index in s){ if (index < ){ (SearchEngine(titleList[index],iconResList[index])) } } }}到此这篇关于Android使⽤ PopupWindow 实现底部弹窗功能的⽂章就介绍到这了,更多相关Android PopupWindow底部弹窗内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
评论列表(0条)