textView——在代码中动态设置setTextSize,单位为dp

size=15dp

mTv2.setTextColor(mContext.getResources().getColor(R.color.color_a2a2a2));
mTv2.setTextSize(mContext.getResources().getDimension(R.dimen.space_7));


你有一个 `TextView`,尺寸是 **213x73px**,字体大小为 **16sp**,现在你想创建一个“相同带线啊哦的色块”——我理解你说的“带线啊哦”可能是语音输入错误或表达不清,结合上下文推测你的真实需求是: > ✅ **创建一个和该 TextView 大小、文字样式完全一致的纯色块(Skeleton)视图,用于骨架屏显示。** 也就是说:这个“色块”要: - 尺寸一样(213x73px) - 字体大小一样(16sp) - 可能还要模拟文字行数、颜色、圆角、背景等 --- ## ✅ 正确做法:用 `View` 模拟文本区域,并设置背景色 + 圆角 ```kotlin fun createTextSkeleton(context: Context): View { val view = View(context) // 设置固定宽高(px) val params = ViewGroup.LayoutParams(213, 73) view.layoutParams = params // 设置背景色(常用灰色系,模仿文字) val backgroundColor = Color.parseColor("#E0E0E0") // 浅灰 view.background = getRoundedRectDrawable(backgroundColor, 4f) // 可选:加圆角 return view } // 工具函数:生成圆角矩形 Drawable private fun getRoundedRectDrawable(color: Int, cornerRadius: Float): Drawable { val drawable = GradientDrawable() drawable.setColor(color) drawable.cornerRadius = cornerRadius return drawable } ``` ### 🔁 如果你想更接近真实 TextView 的文字效果? 可以进一步模拟“文字行”,比如使用自定义 `View` 或 `TextView` 加蒙版: ```kotlin fun createTextSkeletonAsTextView(context: Context): TextView { val tv = TextView(context) // 设置尺寸 tv.layoutParams = ViewGroup.LayoutParams(213, 73) // 设置背景为灰色条纹,模拟文字行 tv.setBackgroundColor(Color.parseColor("#E0E0E0")) // 可选:设置一些伪文字占位 tv.text = " " // 留白 tv.setTextSize(TypedValue.COMPLEX_UNIT_SP, 16f) tv.setTextColor(Color.parseColor("#E0E0E0")) // 文字也设成灰色,视觉统一 // 可选:加圆角 tv.background = getRoundedRectDrawable(Color.parseColor("#E0E0E0"), 4f) return tv } ``` 这样看起来更像是“被模糊/遮盖的文字”。 --- ## 📏 单位说明:为什么用 px?什么时候用 sp/dp? | 单位 | 用途 | |------|------| | `px` | 你已知具体像素值(如从原 View 获取的 width/height),直接使用 | | `dp` | 布局尺寸、间距、图标大小等与密度相关但不随字体缩放 | | `sp` | 字体大小,随用户字体偏好变化 | 📌 因为你是在做“骨架屏”,目标是**精确复刻原 View 外观**,所以: - 宽高用 `px` 没问题 ✅ - 但如果你要设置文字大小 → 用 `sp` 才能适配系统设置 ✅ --- ## ✅ 如何获取正确的宽高(避免 0 问题)? 如果你不是在布局完成后取 `view.width`,会得到 0。 ✅ 推荐方式: ```kotlin view.post { val width = view.width // 此时已测量完成 val height = view.height // 创建骨架 } ``` 或者传入预估尺寸。 --- ## ✅ 最终建议:封装成工具类 ```kotlin object SkeletonUtils { fun newTextBlock(context: Context, widthPx: Int, heightPx: Int, textSizeSp: Float = 16f): View { val view = View(context) view.layoutParams = ViewGroup.LayoutParams(widthPx, heightPx) view.background = getRoundedRectDrawable(Color.parseColor("#E0E0E0"), 3f) return view } private fun getRoundedRectDrawable(color: Int, cornerRadiusDp: Float): Drawable { val radiusPx = dpToPx(cornerRadiusDp) val drawable = GradientDrawable() drawable.setColor(color) drawable.cornerRadius = radiusPx return drawable } private fun dpToPx(dp: Float): Float { val scale = Resources.getSystem().displayMetrics.density return dp * scale + 0.5f } } ``` ### 使用: ```kotlin val skeleton = SkeletonUtils.newTextBlock(context, 213, 73, 16f) parent.addView(skeleton) ``` --- ## ✅ 总结 你要做的事很简单: > 画一个 **213x73px** 的灰色矩形,风格像 TextView。 只需: 1. 创建 `View` 2. 设定宽高 `213x73` 3. 背景设为浅灰色(可加圆角) 4. 添加到父容器 就完成了“文字色块”的骨架效果。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值