1

这是布局(下)。我正在尝试重新定位复选框的位置;将其移动到视图的右侧。android:gravity 和 android:layout_gravity 似乎没有效果。有什么解释吗?此 LinearLayout 是相对布局的子级。

在此处输入图像描述

<LinearLayout
            android:id="@+id/deviceLinear"
            android:layout_width="fill_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/view1" >

            <ImageView
                android:contentDescription="@string/devices_icon"
                android:id="@+id/devices_img"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="0.15"
                android:layout_gravity="center"
                android:src="@drawable/hardware_phone" />

            <TextView
                android:id="@+id/devices"
                android:layout_width="0dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="0.43"
                android:text="@string/devices"
                android:textSize="20sp" />

            <CheckBox
                android:id="@+id/check_devices"
                android:button="@drawable/custom_checkbox"
                android:layout_width="0dip"
                android:layout_height="fill_parent"
                android:layout_weight="0.42"
                android:onClick="onCheckboxClicked" />

        </LinearLayout>
4

2 回答 2

2

我假设您希望 位于CheckBox的右侧LinearLayout。既然你给了它 alayout_weight它总是占据宽度的某个固定百分比,无论它的大小如何,你可以从那个蓝色边界框看到。

尝试将复选框包装在另一个LinearLayout具有android:orientation='horizontal'. 给0.42包装重量LinearLayout,然后将LinearLayout'sandroid:gravity设置为right。在将复选框移动到最右侧时,这应该保持间距。

像这样的东西:

<LinearLayout
  android:orientation="horizontal"
  android:layout_width="0dp"
  android:layout_weight="0.42"
  android:layout_height="wrap_content"
  android:gravity="right" />

    <CheckBox
      android:layout_width="wrap_content"
      android:layout_height="wrap_content" />
</LinearLayout>

您可能还需要考虑RelativeLayout使您能够根据其他视图的位置定位视图。

于 2013-06-26T21:46:18.330 回答
1

您正在为您的复选框提供 layout_weight="0.42" ,这意味着它将使用基于 LinearLayout 宽度的宽度进行测量。通过这种方法,您将永远无法将其放在正确的位置。

实现目标的最佳方式是使用 RelativeLayout。这是我的列表项布局,右侧有一个复选框。对合并标签感到抱歉,但它在 RelativeLayout 中合并

android:layout_width="match_parent"
android:layout_height="wrap_content"

属性

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android">
<ImageView android:id="@+id/imgChannelIcon"
    android:layout_alignParentLeft="true"
    style="?muListItemImage60x60" />

<CheckBox android:id="@+id/chkIsChecked"
    android:layout_width="wrap_content"
    android:layout_height="0dp"
    android:layout_alignTop="@+id/imgChannelIcon"
    android:layout_alignParentRight="true"
    android:layout_alignBottom="@+id/imgChannelIcon"
    android:layout_marginLeft="@dimen/list_item_checkbox_margin_left"
    android:layout_marginRight="@dimen/list_item_checkbox_margin_right"
    android:layout_marginTop="@dimen/list_item_checkbox_margin_top"
    android:layout_marginBottom="@dimen/list_item_checkbox_margin_bottom"
    android:focusable="false"
    android:focusableInTouchMode="false" />

<TextView android:id="@+id/lblChannelTitle"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/imgChannelIcon"
    android:layout_alignTop="@+id/imgChannelIcon"
    android:layout_toLeftOf="@+id/chkIsChecked"
    android:layout_alignWithParentIfMissing="true"
    android:includeFontPadding="false"
    android:textStyle="bold"
    android:text="@string/channel_item_dummy_title" 
    style="?muListItemTextBig" />

<TextView android:id="@+id/lblChannelSubtitle"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/imgChannelIcon"
    android:layout_below="@+id/lblChannelTitle"
    android:layout_toLeftOf="@+id/chkIsChecked"
    android:layout_alignWithParentIfMissing="true"
    android:includeFontPadding="false"
    android:textStyle="normal"
    android:text="@string/channel_item_dummy_subtitle"
    style="?muListItemTextNormal" />

<TextView android:id="@+id/lblChannelCategory"
   android:layout_width="0dp"
   android:layout_height="0dp"
   android:layout_toRightOf="@+id/imgChannelIcon"
   android:layout_below="@+id/lblChannelSubtitle"
   android:layout_alignBottom="@+id/imgChannelIcon"
   android:layout_toLeftOf="@+id/chkIsChecked"
   android:layout_alignWithParentIfMissing="true"
   android:includeFontPadding="false"
   android:paddingLeft="3dp"
   android:gravity="center_vertical|left"
   android:textStyle="italic"
   android:text="@string/channel_item_dummy_category"
   style="?muListItemTextNormal_Inverse" />

<TextView android:id="@+id/lblChannelUpdate"
   android:layout_width="0dp"
   android:layout_height="wrap_content"
   android:layout_below="@+id/imgChannelIcon"
   android:layout_alignParentLeft="true"
   android:layout_alignParentRight="true"
   android:includeFontPadding="false"
   android:paddingTop="3dp"
   android:paddingBottom="3dp"
   android:textStyle="italic"
   android:text="@string/channel_item_dummy_update"
   style="?muListItemTextTiny" />
</merge>

如您所见,我首先放置一个带有 layout_alignParentLeft="true" 的图像,然后是带有 layout_alignParentRight="true" 的复选框,最后我根据这两个组件排列其他组件。从您的图像中,我可以看到您可以使用您的 devices_img 作为左侧组件(但您必须给它一个固定的高度,也许还有一些边距才能成为布局的高度)和您的复选框作为您的右侧。

请记住,在以 wrap_content 作为高度的 RelativeLayout 中,您不能使用 AlignParentBottom 属性。

希望这可以帮助...

于 2013-06-26T21:59:39.390 回答