Kotlin中如何通过代码为AlertDialogBuilder的TextInputEditText设置边距
问题原因
你设置的margin不生效的核心原因是:直接将TextInputEditText传入AlertDialog.setView()时,系统会将该View挂载到AlertDialog内置的父布局上,你提前为View设置的LinearLayout.LayoutParams与父布局类型不匹配,会被替换为父布局对应的默认LayoutParams,因此margin配置会丢失。
解决方案
方案1:外层包裹线性布局(推荐)
给TextInputEditText套一层同类型的LinearLayout作为容器,再将容器传入setView,此时你设置的LinearLayout.LayoutParams会正常生效,代码示例:
// 创建外层线性布局容器 val container = LinearLayout(context!!) val containerLp = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ) container.layoutParams = containerLp val input = TextInputEditText(context!!) input.gravity = Gravity.CENTER CommonHelper.capitalizeTextbox(input) input.inputType = InputType.TYPE_CLASS_TEXT input.setSingleLine() input.gravity = Gravity.CENTER // 为输入框设置带边距的布局参数 val inputLp: LinearLayout.LayoutParams = LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT ).apply { setMargins(50, 10, 50, 10) } input.layoutParams = inputLp // 将输入框加入容器,再把容器传给Dialog container.addView(input) alertDialog.setView(container) alertDialog.setIcon(R.drawable.ic_plate)
方案2:使用内边距替代外边距
如果需求允许用内边距实现同等视觉效果,可直接给TextInputEditText设置padding,无需依赖父布局LayoutParams,配置直接生效:
input.setPadding(50, 10, 50, 10)
注意:上述示例中的数值单位为px,如需适配不同设备密度,建议先将dp值转换为像素值后再传入。
内容的提问来源于stack exchange,提问作者Ibanez1408
相关产品推荐
相关产品推荐

