是否有一种简单的方法可以在复选框控件中的复选框和关联文本之间添加填充?

我不能只添加前导空格,因为我的标签是多行的.

按原样,文本太接近复选框了: ALT Text

推荐答案

我不想回答我自己的问题,但在这种情况下,我想我需要回答.在判断之后,@Falmarri的答案是正确的.问题是Android的CheckBox控件已经使用android:paddingLeft属性来获取文本.

红线显示整个复选框的paddingLeft偏移值

alt text

如果我只是在XML布局中覆盖这个填充,就会弄乱布局.下面是设置paddingLeft="0"的作用:

alt text

事实证明,用XML无法解决这个问题.你必须用代码来做.这是我的代码片段,硬编码的填充增加了10dp.

final float scale = this.getResources().getDisplayMetrics().density;
checkBox.setPadding(checkBox.getPaddingLeft() + (int)(10.0f * scale + 0.5f),
        checkBox.getPaddingTop(),
        checkBox.getPaddingRight(),
        checkBox.getPaddingBottom());

这将为您提供以下内容,其中绿线是填充的增加.这比硬编码值更安全,因为不同的设备可能会为复选框使用不同的可绘图项.

ALT Text

更新-正如人们最近在下面的回答中提到的那样,这种行为在Jelly Bean(4.2)中明显发生了变化.您的应用程序需要判断它在哪个版本上运行,并使用适当的方法.

对于4.3+,只需设置PADDING_LEFT即可.详情见htafoya的答案.

Android相关问答推荐

Android Kotlin DSL Gradle找不到自定义存储库中的依赖项

ENV变量在gradle进程中没有更新

无法在Jetpack Compose中显示Admob原生广告

在Jetpack Compose中,material 3 Textfield上的底部边框 colored颜色 是如何更改的?

为什么Ionic-checkbox不总是刷新Android上的视图?

如何阻止Gradle在编译时生成app-metadata.properties

在Jetpack Compose中实现自动换行

设置文本 colored颜色 动画时如何减少重新组合?

Jetpack Compose 使用 SavedStateHandle 发送返回结果不适用于 ViewModel 中注入的 SavedStateHandle

Jetpack Compose 绘制范围内的动画

在 AGP 8.0 中构建失败,无法应用插件realm-android. APIandroid.registerTransform已删除

错误:构建 react-native 应用程序时包 com.facebook.react.bridge 不存在

Android Studio 错误要求依赖它的库和应用程序针对 Android API 的 33 版或更高版本进行编译.

如何在 MAUI 项目中包含每个平台的现有 C++ 库?

如何为具有不同屏幕尺寸但相同密度的手机创建响应式布局?

使用 Room 在 SQLite 中保存复杂的 JSON 响应

复用 RecyclerView 适配器,避免不必要的 API 调用

jetpack compose 中的可点击指示是什么?

房间实时数据:启动时崩溃

即使会话已暂停且音频已禁用,Android 设备仍显示正在使用麦克风