我正在制作一个带有cardview,复选框和按钮的布局,其初始结构如第一张图片所示:
在这种情况下,直到用户点击cardview中的图像才会显示列表视图,因此当发生这种情况时,所需的结构就像 第二张图片
然而,由于listview实际上是在一个片段中,我无法实现所需的布局,因为cardview的wrap_content和match_parent给了我下一个结果
正如您所看到的,cardview与按钮重叠,复选框超出了屏幕
现在这是我的布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/card"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_alignParentTop="true"
>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="5dp"
>
<ImageButton
android:layout_width="@dimen/event_invitation_expand_icon"
android:layout_height="@dimen/event_invitation_expand_icon"
android:id="@+id/shrink"
android:src="@drawable/ic_shrink"
android:background="@android:color/transparent"
android:scaleType="fitCenter"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/shrink"
android:layout_marginTop="5dp"
android:id="@+id/list">
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="ListFragment"
tools:layout="@layout/fragment_list"/>
</RelativeLayout>
</RelativeLayout>
</android.support.v7.widget.CardView>
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/checkBox"
android:layout_marginTop="20dp"
android:layout_below="@+id/card"/>
<Space
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/button"
android:layout_below="@+id/checkBox"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:layout_alignParentBottom="true"
style="@android:style/Widget.DeviceDefault.Button.Borderless"
/>
我希望你可以帮我设置卡片视图的最大高度,以便在空间填满时停止生长。
我还尝试将复选框始终设置在底部和cardview以填充剩余空间,虽然它在扩展列表视图时为我提供了正确的结构,但它对于隐藏的列表不起作用cardview没有任何东西填补空间。
更新
正如所建议的,我尝试使用权重将根布局更改为LinearLayout,但是,我得到了与之前相同的结果,如果我将cardview的权重更改为1并将复选框更改为0,则可以获得所需的布局对于扩展列表但不是隐藏案例。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/white"
android:orientation="vertical">
<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/card"
android:layout_marginTop="5dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:layout_weight="0">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="5dp"
>
<ImageButton
android:layout_width="@dimen/event_invitation_expand_icon"
android:layout_height="@dimen/event_invitation_expand_icon"
android:id="@+id/shrink"
android:src="@drawable/ic_shrink"
android:background="@android:color/transparent"
android:scaleType="fitCenter"
android:layout_gravity="center_vertical"
android:layout_marginRight="5dp"/>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/shrink"
android:layout_marginTop="5dp"
android:id="@+id/list">
<fragment
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:name="ListFragment"
tools:layout="@layout/fragment_list"/>
</RelativeLayout>
</android.support.v7.widget.CardView>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/check"
android:id="@+id/check"
android:layout_marginTop="20dp"
android:layout_below="@+id/card"
/>
</LinearLayout>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/button"
android:textStyle="bold"
android:textColor="@android:color/white"
/>
答案 0 :(得分:2)
您需要使用LinearLayout
并使用Weight作为孩子。
您可以点击更改所有视图权重。
但我认为您需要将CheckBox
置于布局中并设置此布局权重。否则你会弄乱身高
没有看到你的布局,但你可能也需要为CardView
做到这一点。
请记住这一点。
希望这有帮助
答案 1 :(得分:0)
要做你想做的事情,你可以更好地使用具有垂直方向的LinearLayout作为你的根元素。这样做,你可以将CardView的权重设置为1(和0dp的高度&#39;,因为重量如何工作)而不给其他元素赋予权重,使其填充所有可用空间没有采取其他两个要素。这样做的方法可以在这里找到: http://developer.android.com/guide/topics/ui/layout/linear.html#Weight