如何在Android中将复选框与其描述对齐到顶部

37

我希望将CheckBox的“符号”与其描述上方对齐。

现有情况:before

想要的效果:after

当前的xml:

<CheckBox android:id="@+id/register_checkbox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/register_hint"/>

我曾试图通过操纵 layout_gravity 属性来实现这一点,但它并不起作用。


也许不太优雅,但可以尝试在复选框旁边加一个没有文本的TextView,这样可能能达到你的目的。因为我不知道有原生方法可以做到你想要的效果。 - wnieves19
4个回答

55

android:gravity="top"将解决这个问题:

<CheckBox android:id="@+id/register_checkbox"
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:text="@string/register_hint"
          android:gravity="top"/>
请注意,android:gravityandroid:layout_gravity是不同的。

你的解决方案有效!事实上,我正在操作android:layout_gravity属性,这就是为什么我看不到任何效果的原因。 - fragon
3
为什么我的代码没有运行?我必须在左侧使用一个复选框和右侧使用一个文本视图。 - DawnYu
这在一些语言如CJK上不会很好地工作。 - Tsung Wu
这个解决方案有点半吊子。文本与复选框的对齐方式很奇怪。为了解决这个问题,需要像 Abdul Rashid 提到的那样添加 padding_top="4dp" - amar

25
  • 使用

    android:gravity="top" 它将固定盒子在顶部

  • 使用

    padding_top="4dp" 将仅调整文本填充(而不更改来自顶部的框填充)


1
添加 padding_top 可以解决文本顶部出现的丑陋裁剪问题。谢谢! - egorikem

16

我发现:

 android:gravity="fill"

比“顶部”更好。如果复选框最终也可能只有一行,那么“顶部”看起来就不合适。


1
这实际上似乎是完美的解决方案!它同样适用于短文本(一行)和长文本,而且不需要使用静态填充来做出关于字体大小的假设。 - V.S.

1
你可以尝试这段代码:-
    <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false">
        <layer-list>
            <item android:top="2dp">
                <bitmap android:gravity="center" android:src="@drawable/checkbox" />
            </item>
        </layer-list>
    </item>
    <item android:state_checked="true">
        <layer-list>
            <item android:top="2dp">
                <bitmap android:gravity="center" android:src="@drawable/checkboxselected" />
            </item>
        </layer-list>
    </item>
    <item>
        <layer-list>
            <item android:top="2dp">
                <bitmap android:gravity="center" android:src="@drawable/checkbox" />
            </item>
        </layer-list>
    </item>
</selector>

1
如果您有矢量可绘制对象,请使用<item android:top="2dp" android:drawable="..."/>而不是<item><bitmap android:src="..."/></item>。 - mklkj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接