概述:记录一下常见布局的编写方式。
1、实现固定宽度的自动换行操作。
答:使用recyclerView的网格布局即可。
2、实现非固定宽度的自动换行操作。
答:使用别人的开源组件。
应用场景,b站视频的标签,商品标签等等。
<com.am.widget.wraplayout.WrapLayout
android:id="@+id/container"
android:layout_below="@id/tv2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="5dp"
android:layout_marginTop="10dp"
/>
//绑定标签
var labelList = holder.getView<WrapLayout>(R.id.container) //获得recyclerView布局,设定为grid布局,一行
labelList.removeAllViews() //瀑布流上拉加载的时候也会刷新recyclerView
//标签水平间距
labelList.horizontalSpacing = 10
//标签垂直间距
labelList.verticalSpacing = 10
if(item.labelList != null && item.labelList.size != 0){
// Log.e("首页标签测试","每个item的标签数量 -> ${item.labelList.size}")
for (i in item.labelList){
//创建圆角矩形shapeTextView
var stv = ShapeTextView(labelList.context)
var lp = LinearLayout.LayoutParams(
LinearLayout.LayoutParams.WRAP_CONTENT,
LinearLayout.LayoutParams.WRAP_CONTENT
)
lp.bottomMargin = AutoSizeUtils.dp2px(context,4f)
lp.rightMargin = AutoSizeUtils.dp2px(context,3f)
stv.layoutParams = lp
stv.setPadding(AutoSizeUtils.dp2px(context,3f),AutoSizeUtils.dp2px(context,1.5f),AutoSizeUtils.dp2px(context,3f),AutoSizeUtils.dp2px(context,1.5f))
stv.text = i
stv.textSize = 9f
stv.textColorBuilder.setTextColor(Color.parseColor("#161616")).intoTextColor() //设置文字颜色
stv.setTextColor(Color.parseColor("#FF585858"))
stv.shapeDrawableBuilder.setRadius(30f).intoBackground() //设置圆角
stv.shapeDrawableBuilder.setSolidColor(Color.parseColor("#FFE0E0E0")).intoBackground()//设置背景颜色#FFE0E0E0
labelList.addView(stv)
}
}
3、布局根据屏幕大小保持比例不变。
答:使用LinearLayout布局,设置weightSum属性,子view设置layout_weight属性。记住需要把设定的宽度或者高度设置0dp。
4、使布局固定到某一个位置,并且保持屏幕最上方。
答:使用RelativeLayout布局,最后一个子View会显示在屏幕的最上方,不会被遮挡,常用来做activity标题头(titlebar)。
5、组件需要进行旋转。
答:使用如下属性即可。
android:rotation="180"
6、滑动布局。
答:推荐使用NestedScrllView。
7、如何使用recyclerView实现瀑布流布局。
答:参考:https://www.jianshu.com/p/c4a7f0eb72f9
8、消除recyclerView、scrollView的上下拉阴影。
答:如下
android:overScrollMode="never"
9、禁止recyclerView滑动属性。
android:nestedScrollingEnabled="false"
10、固定顶部状态栏和底部虚拟按键
在布局中添加如下属性
android:fitsSystemWindows="true"
待补充。。。
网友评论