android.view.ViewGroup.LayoutParams介绍

本文详细解析了Android中LayoutParams类的功能与使用方法。LayoutParams作为子视图与父视图间沟通的桥梁,用于传递子视图的布局参数,如宽度、高度等。通过实例展示了如何设置LinearLayout.LayoutParams来调整TextView的大小。
1 public static class
2 ViewGroup.LayoutParams
3 extends Object
4  
5 java.lang.Object
6 ↳ android.view.ViewGroup.LayoutParams //继承关系

其实这个LayoutParams类是用于child view(子视图) 向 parent view(父视图)传达自己的意愿的一个东西

父视图可以简单理解成一个LinearLayout 和 这个LinearLayout里边一个 TextView 的关系

TextView 就算LinearLayout的子视图 child view 。

每个不同的ViewGroup都有自己的LayoutParams子类,比如LinearLayout 也有自己的 LayoutParams

1 LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(
2 LinearLayout.LayoutParams.FILL_PARENT,
3 LinearLayout.LayoutParams.WRAP_CONTENT
4 );
5 //调用addView()方法增加一个TextView到线性布局中
6 mLayout.addView(textView, p);
7 //比较简单的一个例子

LayoutParams 可以理解为layout的包信息,其中包含了各种数据。 如下:

1 LinearLayout.LayoutParams param1 = new LinearLayout.LayoutParams(
2     LinearLayout.LayoutParams.FILL_PARENT,
3     LinearLayout.LayoutParams.WRAP_CONTENT);
4 myTextView.setText(R.string.title);
5 myTextView.setTextColor(getResources().getColor(R.drawable.blue));
6  
7 /* 将TextView加到myLinearLayout */
8 myLinearLayout.addView(myTextView, param1);
变量param1 定义了宽, 高。

然后把这个作为myTextView的参数了。这很好的体现了LayoutParams的作用。

notes:只能对自己的子类做这样的设定。

fun ViewGroup.showSkeletonVExt(config: SkeletonConfig) { // 1. 先隐藏已显示的骨架(防止重复添加) hideSkeletonVExt() val skeletonView = LayoutInflater.from(context).inflate(config.customLayoutRes!!, this, false) //根据布局类型控制约束 val lp = when (this) { is FrameLayout -> FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) is LinearLayout -> LinearLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) is RelativeLayout -> RelativeLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) is ConstraintLayout -> ConstraintLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, 0 ).apply { topToTop = ConstraintLayout.LayoutParams.PARENT_ID bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID startToStart = ConstraintLayout.LayoutParams.PARENT_ID endToEnd = ConstraintLayout.LayoutParams.PARENT_ID } else -> ViewGroup.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT ) } skeletonView.setBackgroundColor(Color.TRANSPARENT) // ✅ 重要! // 保证在所有子 View 之上 addView(skeletonView, lp) val animation= AnimationManager(skeletonView,config) animation.start() // 4. 将骨架 View 添加到当前 ViewGroup,并通过 tag 存储(后续移除用) setTag(R.id.tag_skeleton_view, skeletonView) setTag(R.id.tag_skeleton_shimmer, animation) } 这个由于没有处理原来的可见性会导致点击穿透,所以我在想直接处理skeletonView的点击事件进行拦截
12-12
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值