Android相对来自wrap_content和match_parent

时间:2016-10-08 14:49:50

标签: android android-linearlayout swipe out

我遇到了RelativeLayout的问题。它是列表项的自定义视图。我有一个RelativeLayout,它的高度设置为wrap_content。其中有三个线性布局,其中一个的高度设置为wrap_content。其他两个设置为match_parent,因为我需要它们来填充父级,以适应wrap_content。应该增长的两个是在另一个之后(它用于滑动,当滑动时顶视图移开以显示底部两个)。 ptoblem是,设置为wrap_content的LinearLayout根据需要增长。 RelativeLayout根据需要增长,两个LinearLayout没有增长。有关如何实现这一目标的任何想法吗?

更新:这是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。

1 个答案:

答案 0 :(得分:1)

我终于在这里找到了这个答案...... 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>