Android相对于wrap_content和match_parent
Android relatively out wrap_content and match_parent
我对 RelativeLayout 有疑问。它是列表项的自定义视图。我有一个 RelativeLayout,它的高度设置为 wrap_content。它的内部是三个线性布局,其中一个的高度设置为 wrap_content。其他两个设置为 match_parent,因为我需要它们在父级增长以容纳 wrap_content 之后填充父级。应该增长的两个在另一个后面(它用于滑动,滑动时顶部视图移开以显示底部两个)。问题是,设置为 wrap_content 的 LinearLayout 会根据需要增长。 RelativeLayout 根据需要增长,两个 LinearLayouts 没有增长。关于如何完成此操作的任何想法?
更新:这是 XML...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_vertical"
android:background="@color/black"
android:id="@+id/Swipe"
>
<LinearLayout
android:id="@+id/LeftContentView"
android:layout_width="175dp"
android:layout_height="match_parent"
android:background="@color/yellow"
android:layout_alignParentLeft="true"
android:orientation="horizontal"
>
<Button
android:id="@+id/ApproveButton"
android:layout_width="0dp"
android:layout_weight=".72"
android:layout_height="match_parent"
android:background="#2796C3"
android:text="Approve"
android:layout_alignParentLeft="true"
/>
<Button
android:id="@+id/ApproveUndoButton"
android:layout_width="0dp"
android:layout_weight=".28"
android:layout_height="match_parent"
android:background="#215681"
android:text="Undo"
android:layout_toRightOf="@id/ApproveButton"
/>
</LinearLayout>
<LinearLayout
android:layout_alignParentRight="true"
android:id="@+id/RightContentView"
android:layout_width="175dp"
android:layout_height="match_parent"
android:background="@color/black"
android:orientation="horizontal"
>
<Button
android:id="@+id/DenyButton"
android:layout_width="0dp"
android:layout_weight=".72"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="Deny"
/>
<Button
android:id="@+id/DenyUndoButton"
android:layout_width="0dp"
android:layout_weight=".28"
android:layout_height="match_parent"
android:background="#860000"
android:text="Undo"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/TopContentView"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1F1F1F">
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="match_parent" >
<ImageView
android:id="@+id/UnreadImage"
android:layout_height="match_parent"
android:layout_width="7dp"
android:src="@drawable/vertical_blue_bar"
android:background="#2796C3"/>
<LinearLayout
android:id="@+id/ListText"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:padding="12dp">
<TextView
android:id="@+id/Text_Line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="11dip"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
目标是让 TopContentView 覆盖另外两个(Left 和 RightContentView)。 TopContentView 需要增长,因为其中有三个文本框,其中一个可以隐藏,从而使整体布局更短。所以 Left 和 Right 需要扩大和缩小以匹配 TopContentView。
我终于在这里找到了这个答案...How to get a button's height to match another element's height? 并向下滚动到 Falmarri 的答案,hcpl 的答案本质上是相同的,但提供了更多细节和代码示例。
基本上,我将 LeftContentView 和 RightContentView 线性布局更改为具有 wrap_content 的高度,然后我添加了这两个参数...
android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/TopContentView"
这会拉伸它们以与父级 TopContentView 的顶部和底部对齐。我尝试使用 layout_AlignParentTop="true" 和 layout_AlignParentBottom='true" 但这只是将它移到了底部,通过将底部设置为另一个控件它工作得很好。
此外,我将 LinearLayouts 更改为 RelativeLayouts。生成的 AXML 是...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_vertical"
android:background="@color/black"
android:id="@+id/Swipe"
>
<RelativeLayout
android:id="@+id/LeftContentView"
android:layout_width="175dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/black"
android:layout_alignParentLeft="true"
android:layout_alignBottom="@+id/TopContentView"
>
<Button
android:id="@+id/ApproveButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2796C3"
android:text="Approve"
android:layout_alignParentLeft="true"
/>
<Button
android:id="@+id/ApproveUndoButton"
android:layout_width="50dp"
android:layout_height="match_parent"
android:background="#215681"
android:text="Undo"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/RightContentView"
android:layout_width="175dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/black"
android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/TopContentView"
>
<Button
android:id="@+id/DenyButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="Deny"
/>
<Button
android:id="@+id/DenyUndoButton"
android:layout_width="50dp"
android:layout_height="match_parent"
android:background="#860000"
android:layout_alignParentLeft="true"
android:text="Undo"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/TopContentView"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1F1F1F">
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="match_parent" >
<ImageView
android:id="@+id/UnreadImage"
android:layout_height="match_parent"
android:layout_width="7dp"
android:src="@drawable/vertical_blue_bar"
android:background="#2796C3"/>
<LinearLayout
android:id="@+id/ListText"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:padding="12dp">
<TextView
android:id="@+id/Text_Line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="11dip"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
我对 RelativeLayout 有疑问。它是列表项的自定义视图。我有一个 RelativeLayout,它的高度设置为 wrap_content。它的内部是三个线性布局,其中一个的高度设置为 wrap_content。其他两个设置为 match_parent,因为我需要它们在父级增长以容纳 wrap_content 之后填充父级。应该增长的两个在另一个后面(它用于滑动,滑动时顶部视图移开以显示底部两个)。问题是,设置为 wrap_content 的 LinearLayout 会根据需要增长。 RelativeLayout 根据需要增长,两个 LinearLayouts 没有增长。关于如何完成此操作的任何想法?
更新:这是 XML...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_vertical"
android:background="@color/black"
android:id="@+id/Swipe"
>
<LinearLayout
android:id="@+id/LeftContentView"
android:layout_width="175dp"
android:layout_height="match_parent"
android:background="@color/yellow"
android:layout_alignParentLeft="true"
android:orientation="horizontal"
>
<Button
android:id="@+id/ApproveButton"
android:layout_width="0dp"
android:layout_weight=".72"
android:layout_height="match_parent"
android:background="#2796C3"
android:text="Approve"
android:layout_alignParentLeft="true"
/>
<Button
android:id="@+id/ApproveUndoButton"
android:layout_width="0dp"
android:layout_weight=".28"
android:layout_height="match_parent"
android:background="#215681"
android:text="Undo"
android:layout_toRightOf="@id/ApproveButton"
/>
</LinearLayout>
<LinearLayout
android:layout_alignParentRight="true"
android:id="@+id/RightContentView"
android:layout_width="175dp"
android:layout_height="match_parent"
android:background="@color/black"
android:orientation="horizontal"
>
<Button
android:id="@+id/DenyButton"
android:layout_width="0dp"
android:layout_weight=".72"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="Deny"
/>
<Button
android:id="@+id/DenyUndoButton"
android:layout_width="0dp"
android:layout_weight=".28"
android:layout_height="match_parent"
android:background="#860000"
android:text="Undo"
/>
</LinearLayout>
<LinearLayout
android:id="@+id/TopContentView"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1F1F1F">
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="match_parent" >
<ImageView
android:id="@+id/UnreadImage"
android:layout_height="match_parent"
android:layout_width="7dp"
android:src="@drawable/vertical_blue_bar"
android:background="#2796C3"/>
<LinearLayout
android:id="@+id/ListText"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:padding="12dp">
<TextView
android:id="@+id/Text_Line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="11dip"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
目标是让 TopContentView 覆盖另外两个(Left 和 RightContentView)。 TopContentView 需要增长,因为其中有三个文本框,其中一个可以隐藏,从而使整体布局更短。所以 Left 和 Right 需要扩大和缩小以匹配 TopContentView。
我终于在这里找到了这个答案...How to get a button's height to match another element's height? 并向下滚动到 Falmarri 的答案,hcpl 的答案本质上是相同的,但提供了更多细节和代码示例。 基本上,我将 LeftContentView 和 RightContentView 线性布局更改为具有 wrap_content 的高度,然后我添加了这两个参数...
android:layout_alignParentTop="true"
android:layout_alignBottom="@+id/TopContentView"
这会拉伸它们以与父级 TopContentView 的顶部和底部对齐。我尝试使用 layout_AlignParentTop="true" 和 layout_AlignParentBottom='true" 但这只是将它移到了底部,通过将底部设置为另一个控件它工作得很好。
此外,我将 LinearLayouts 更改为 RelativeLayouts。生成的 AXML 是...
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:local="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="fill_vertical"
android:background="@color/black"
android:id="@+id/Swipe"
>
<RelativeLayout
android:id="@+id/LeftContentView"
android:layout_width="175dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/black"
android:layout_alignParentLeft="true"
android:layout_alignBottom="@+id/TopContentView"
>
<Button
android:id="@+id/ApproveButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#2796C3"
android:text="Approve"
android:layout_alignParentLeft="true"
/>
<Button
android:id="@+id/ApproveUndoButton"
android:layout_width="50dp"
android:layout_height="match_parent"
android:background="#215681"
android:text="Undo"
android:layout_alignParentRight="true"
/>
</RelativeLayout>
<RelativeLayout
android:id="@+id/RightContentView"
android:layout_width="175dp"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:background="@color/black"
android:layout_alignParentRight="true"
android:layout_alignBottom="@+id/TopContentView"
>
<Button
android:id="@+id/DenyButton"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FF0000"
android:text="Deny"
/>
<Button
android:id="@+id/DenyUndoButton"
android:layout_width="50dp"
android:layout_height="match_parent"
android:background="#860000"
android:layout_alignParentLeft="true"
android:text="Undo"
/>
</RelativeLayout>
<LinearLayout
android:id="@+id/TopContentView"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#1F1F1F">
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="match_parent" >
<ImageView
android:id="@+id/UnreadImage"
android:layout_height="match_parent"
android:layout_width="7dp"
android:src="@drawable/vertical_blue_bar"
android:background="#2796C3"/>
<LinearLayout
android:id="@+id/ListText"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="10dip"
android:padding="12dp">
<TextView
android:id="@+id/Text_Line1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="13dip"
/>
<TextView
android:id="@+id/Text_Line3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/white"
android:textSize="11dip"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
</RelativeLayout>