我正在开发自定义列表视图。我想在自定义视图中显示CheckBox
。 CheckBox
没有文字。我发现它总是在CheckBox
的右边有一些空格。
这是我的布局xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="horizontal" android:background="#fa9654"
android:paddingTop="65dp" android:paddingBottom="65dp">
<TextView android:id="@+id/bus_route_list_item_num"
android:layout_height="wrap_content" android:layout_width="0dip"
android:gravity="center" android:layout_gravity="center_vertical|center_horizontal"
android:layout_weight="0.15"></TextView>
<TextView android:id="@+id/bus_route_list_item_station"
android:layout_height="wrap_content" android:layout_width="0dip"
android:gravity="left" android:layout_gravity="center_vertical|center_horizontal"
android:layout_weight=".5"></TextView>
<TextView android:id="@+id/bus_route_list_item_fee"
android:layout_height="wrap_content" android:layout_width="0dip"
android:gravity="center" android:layout_gravity="center_vertical|center_horizontal"
android:layout_weight=".15"></TextView>
<CheckBox android:id="@+id/bus_route_list_item_reminder" android:layout_height="wrap_content"
android:layout_width="0dip" android:layout_weight=".20" android:gravity="center"
android:layout_gravity="center" android:paddingRight="0dp" android:paddingLeft="0dp"
android:paddingTop="0dp" android:paddingBottom="0dp" android:background="#0066ff"
android:text=""
/>
</LinearLayout>
结果如下:
http://pwong.name/checkbox_problem2.jpg
如您所见,复选框右侧有一些空格。我想要的是将复选框放在蓝色区域的中间。
是否可以删除不需要的空间?感谢
答案 0 :(得分:17)
您可以将CheckBox
打包在LinearLayout中,然后在该布局上使用android:gravity="center"
。
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="0dip"
android:layout_weight=".20"
android:background="#ff0000"
android:gravity="center">
<CheckBox android:id="@+id/bus_route_list_item_reminder"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
/>
</LinearLayout>
作为另一种选择,您可以使用RelativeLayout
。这将大大简化您的布局,您将能够摆脱layout_weight
。
答案 1 :(得分:7)
之前的解决方案都不适用于我,但我尝试对内容应用翻译并且效果很好,不需要额外的布局层次结构,也不需要实现自己的视图:
<CheckBox
...
android:text="@null"
android:translationX="12dp" />
此外,它将元素的边界保持在适当的位置,因此触摸区域不会移位。
答案 2 :(得分:2)
要删除图像右侧的额外空间(当没有文本时),请扩展CheckBox类并覆盖 getSuggestedMinimumWidth()方法,以便返回图像宽度。完整的解决方案:
import android.content.Context;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.util.AttributeSet;
import android.widget.CheckBox;
public class CheckBoxWithoutText extends CheckBox
{
private Drawable buttonDrawable;
public CheckBoxWithoutText(Context context)
{
super(context);
}
public CheckBoxWithoutText(Context context, AttributeSet attrs)
{
super(context, attrs);
}
@Override
protected int getSuggestedMinimumWidth()
{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1)
{
return getCompoundPaddingLeft() + getCompoundPaddingRight();
}
else
{
return buttonDrawable == null ? 0 : buttonDrawable.getIntrinsicWidth();
}
}
@Override
public void setButtonDrawable(Drawable d)
{
buttonDrawable = d;
super.setButtonDrawable(d);
}
}
答案 3 :(得分:1)
默认情况下,该复选框具有minWidth和minHeight值
您可以将其值设置为0
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minWidth="0dp"
android:minHeight="0dp" />
结果将是这样,没有任何多余的空格
答案 4 :(得分:0)
我会在这里使用相对布局。右侧对齐复选框......
此致 斯特凡
答案 5 :(得分:0)
translationX
似乎有效。但是,如果要支持RTL布局,则会导致问题。另一个解决方案是将复选框的宽度设置为固定长度(例如26dp
):
<CheckBox
android:layout_width="26dp"
android:layout_height="wrap_content"
android:text="@null" />