基本上我想要的是一个带有图标的复选框和图标下面的文字,如下所示:
-------------------
| 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" />
有关如何在顶部显示图标和图标下方的文字的任何想法?在此先感谢:)
答案 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);