Android:如何在底部对齐CheckBox文本?

时间:2014-11-20 02:21:43

标签: android android-layout android-view android-checkbox

基本上我想要的是一个带有图标的复选框和图标下面的文字,如下所示:

 -------------------
|   CheckBox Icon   |
|                   |
|   CheckBox Text   |
|                   |
 -------------------

默认情况下,图标位于左侧,文本位于右侧,两者位于同一级别。我在布局下面使用:

<CheckBox
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Switch state"
    android:button="@drawable/my_custom_selector" />

有关如何在顶部显示图标和图标下方的文字的任何想法?在此先感谢:)

5 个答案:

答案 0 :(得分:7)

带有选中和未选中的drawables的CheckedTextView +状态列表:

<CheckedTextView
    android:drawableTop="@drawable/checkmark"
    android:checked="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Checked text"/>

@绘制/复选标记

<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/unchecked" android:state_checked="false"></item>
<item android:drawable="@drawable/checked"></item></selector>

(checkmark.xml已简化)。

答案 1 :(得分:4)

我遇到了同样的问题,我用这个解决了它:

android:button="@null"
android:drawableTop="?android:attr/listChoiceIndicatorMultiple"

答案 2 :(得分:1)

您可以将LinearLayout垂直放置,并将CheckBox(不带文字)放在顶部,将文字放在TextView下面。

最后制作LinearLayout clickable并以编程方式检查/取消选中。

答案 3 :(得分:0)

上述解决方案对我不起作用。缺少的是其中的Kotlin / Java代码。

所以将它添加到你的Kotlin代码中

cb_twitter.setOnClickListener({
            (it as CheckedTextView).toggle()
        })

这是我的XML代码:

<CheckedTextView
    android:id="@+id/cb_twitter"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:checked="false"
    android:drawableTop="@drawable/checkbox_selector_twitter"
    android:gravity="center_horizontal"
    android:text="@string/Twitter"
    android:textAlignment="gravity"/>

我在这里也通过

制作了文本
android:gravity="center_horizontal"
android:textAlignment="gravity"

答案 4 :(得分:0)

我只是通过使用线性布局(垂直)来做到这一点,因为我没有使用任何自定义复选框xml

我的情况就像复选框顶部的文字一样

String input = "?85O89*69R65*87O104*33I1043";

// Step 1: Ignore last character
// Step 2: Convert numbers into characters
int end = input.length() - 1;
int numStart = -1;
StringBuilder buf = new StringBuilder();
for (int i = 0; i < end; i++) {
    char ch = input.charAt(i);
    if (ch >= '0' && ch <= '9') {
        if (numStart == -1)
            numStart = i;
    } else {
        if (numStart != -1) {
            buf.append((char) Integer.parseInt(input.substring(numStart, i)));
            numStart = -1;
        }
        buf.append(ch);
    }
}
if (numStart != -1)
    buf.append((char) Integer.parseInt(input.substring(numStart, end)));

// Step 3: Replace '*' with space
// Step 3.5: Convert letters: uppercase ? lowercase
for (int i = 0; i < buf.length(); i++) {
    char ch = buf.charAt(i);
    if (ch == '*')
        buf.setCharAt(i, ' ');
    else if (Character.isUpperCase(ch))
        buf.setCharAt(i, Character.toLowerCase(ch));
    else if (Character.isLowerCase(ch))
        buf.setCharAt(i, Character.toUpperCase(ch));
}

// Step 4: Reverse the String
buf.reverse();

// Output result
String output = buf.toString();
System.out.println(output);