创新实训博客(19)——Android开发中Layout组件动态化
2020-07-14 06:21
946 查看
前言
以博文展示的页面为例子:
每个博客都有自己对应的标签,而且标签的数量可能并不是一个。
按照原来的那种绘制界面的方式来说,只能是静态数量的组件个数然后设置对应的显示效果。
在Vue.js开发中,Vue自身提供了v-for来遍历添加,而且html和css搭配起来也很方便。
但是在Android开发中,因为在xml中没有办法做到for循环遍历添加。
只能通过尝试在Kotlin代码中来完成相应的操作。
xml中绘制存放动态组件的Layout
在博文展示的页面放置一个tag的list
[code] <LinearLayout android:id="@+id/blog_tag_list" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="12dp" android:layout_marginTop="16dp" android:orientation="horizontal" />
kotlin中获取view
[code]val tagLayout: LinearLayout = findViewById(R.id.blog_tag_list)
然后首先移除里面所有的组件
[code]tagLayout.removeAllViews()
使用kotlin代码绘制动态组件
这里主要是遍历一个列表,列表里面存放着要显示的数据
首先遍历处理json数据
[code] for(i in tagList.indices){ // 处理JSON对象 val tagObj = JSON.parseObject(tagList[i].toString())
然后设置组件的左右边距
[code] val lp = LinearLayout.LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT, LinearLayout.LayoutParams.WRAP_CONTENT) lp.setMargins(8,0,8,0)
新建一个textview对象
[code]val tagItem = TextView(this)
设置好里面的基本信息
包括宽度、高度、文字方向、以及组件整体的边距样式
[code]tagItem.background = getDrawable(R.drawable.shape_radius_category) // tagItem.width = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 64F,resources.displayMetrics).toInt() tagItem.height = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 28F,resources.displayMetrics).toInt() tagItem.setPadding(32,0,32,0) tagItem.gravity = Gravity.CENTER tagItem.layoutParams = lp tagItem.text = "#" + tagObj["name"].toString() tagItem.setTextColor(getColor(R.color.bBlue))
添加到layout中
[code]tagLayout.addView(tagItem)
设置单个组件的响应事件
[code]// 设置监听跳转 val onClickListener = object : View.OnClickListener{ override fun onClick(v: View?) { val token = intent.getStringExtra("token") val tagIntent = Intent(this@BlogActivity, AuthorActivity::class.java) tagIntent.putExtra("type", 0) tagIntent.putExtra("id", tagObj["id"].toString().toInt()) tagIntent.putExtra("token", token) startActivity(tagIntent) } } tagItem.setOnClickListener(onClickListener)
显示效果
使用Log显示每个组件的相关信息
相关文章推荐
- 创新实训博客(33)——探索Android开发中的消息推送功能(推送服务模块进阶设计)
- 创新实训博客(24)——探索Android开发中的消息推送功能(创建通知、创建展开式通知、通过通知打开Activity)
- 创新实训博客(23)——探索Android开发中的消息推送功能(Notification的学习)
- 创新实训博客(30)——探索Android开发中的消息推送功能(推送服务模块)
- Android开发之TabLayout组件的使用
- 创新实训博客(22)——Vue端和Android端对搜索结果的关键词高亮处理方案
- Android开发之TableLayout文本组件…
- ReactNative开发之DrawerLayoutAndroid组件的使用
- 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件讲解(13)
- 【React Native开发】React Native控件之DrawerLayoutAndroid抽屉导航切换组件解说(13)
- Android开发, 子容器/组件在RelativeLayout和LinearLayout中居中
- Android开发——通过使用getResource.getIdentifier() 获取layout中组件id
- 创新实训博客(36)——Android端push推送设置和主界面细节优化处理
- 创新实训博客(20)——Vue中使用ECharts进行数据可视化(基本图表部分)
- Android手机开发:android:layout_weight属性的使用
- 【Android游戏开发之七】(游戏开发中需要的样式)再次剖析游戏开发中对SurfaceView中添加组件方案!
- 【Android游戏开发之七】(游戏开发中需要的样式)再次剖析游戏开发中对SurfaceView中添加组件方案!
- Android开发布局四_绝对布局(AbsoluteLayout)
- Android 开发文档 程序基础 ——Services组件
- android开发时 使用android layout editor 打开xml时eclipse自动关闭