android自定义布局在gridView中无法正确对齐

时间:2017-06-07 05:46:52

标签: java android xml

我有一个布局问题,我有一个我在gridView中使用的自定义布局,其中复选框假设在imageView的右下角对齐。布局的预览显示它看起来正确,但当它加载到gridView时,它会将复选框移动到imageView的左上角。我已经尝试在gridView中缩小图像,并删除gridview中对象之间的间距,但无济于事。

这是我对gridView

的每个项目的自定义布局
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<ImageView
    android:id="@+id/imgThumb"
    android:layout_width="100dp"
    android:layout_height="100dp"/>

<CheckBox
    android:id="@+id/chkImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignEnd="@+id/imgThumb"
    android:layout_alignRight="@+id/imgThumb"
    android:layout_alignBottom="@+id/imgThumb"/>

</RelativeLayout>

这是gridView布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:orientation="vertical">
<GridView
    android:id="@+id/grdImages"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:numColumns="3"
    android:verticalSpacing="5dp"
    android:horizontalSpacing="5dp"
    android:columnWidth="90dp"
    android:stretchMode="columnWidth"
    android:gravity="center"/>

<Button
    android:id="@+id/btnSelect"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Select"
    android:layout_marginTop="5dp"/>

</LinearLayout>

这是我希望gridview中的项目看起来像什么的图像,这也是预览显示它看起来像Preview

的图像

这就是实际gridView GridView

中发生的情况

6 个答案:

答案 0 :(得分:0)

发生此问题的原因是您没有为ImageView设置对齐方式。 只需为ImageView设置alignParentTop = true即可。 然后,通过将其属性layout_below指向ImageView的id来对齐ImageView下方的Checkbox。

或者,使用LinearLayout替换RelativeLayout,其方向是垂直的,因为您已将ImageView设置为固定大小。

答案 1 :(得分:0)

尝试添加:android:layout_marginStart="xdp" x为您的案例的逻辑编号(不能说没有看到任何图像的任何内容)到xml bloq的复选框。

顺便说一下,你应该使用constraint layouts来避免这些问题!而且,如果您已经存在,则只是忘记限制复选框。

祝你好运。

答案 2 :(得分:0)

这可能会有所帮助。

custom_layout:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

<ImageView
    android:id="@+id/imgThumb"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_gravity"center"/>

<CheckBox
    android:id="@+id/chkImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="right|bottom"/>

</FrameLayout>

答案 3 :(得分:0)

这对我来说很好。

<ImageView
 android:id="@+id/imgThumb"
 android:layout_width="100dp"
 android:layout_height="100dp"/>
<CheckBox
 android:marginTop="80dp"
 android:id="@+id/chkImage"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignRight="@+id/imgThumb"/>

答案 4 :(得分:0)

试用此代码:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">

<RelativeLayout
    android:layout_width="100dp"
    android:layout_height="100dp">

<ImageView
    android:id="@+id/imgThumb"
    android:layout_width="100dp"
    android:layout_height="100dp"/>

<CheckBox
    android:id="@+id/chkImage"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"/>
</RelativeLayout>

答案 5 :(得分:0)

尝试此自定义布局。这可能会对您有所帮助。

return _ctx.Course
       .Include(u=>u.Person)
       .Where(ug=>ug.CourseName == "Sciene");