【问题标题】:Partitioned RelativeLayout has left RelativeLayout overlapping right RelativeLayout分区的 RelativeLayout 已左 RelativeLayout 与右 RelativeLayout 重叠
【发布时间】:2019-01-28 07:15:49
【问题描述】:

注意:这似乎是一个重复的问题,但是我没有找到可以回答我的问题/提供解决方案的人。

我有一个布局,我希望设计如下:

这是我迄今为止所尝试的:

当前布局设计:

对应的(attempted)XML布局如下(有问题):

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

    <RelativeLayout
        android:id="@+id/layout_price"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_alignParentEnd="true"
        android:layout_toEndOf="@id/layout_details">

        <TextView
            android:id="@+id/subscriptionCost"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentEnd="true"
            android:text="$ 0.00"
            android:textAlignment="textEnd"
            android:textSize="24sp" />

        <TextView
            android:id="@+id/currency"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/subscriptionCost"
            android:layout_alignParentEnd="true"
            android:text="(USD)"
            android:textAlignment="textEnd"
            android:textSize="16sp"
            android:textStyle="italic" />
    </RelativeLayout>


    <RelativeLayout
        android:id="@+id/layout_details"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true">

        <TextView
            android:id="@+id/subscriptionDuration"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:text="2 Year Subscription"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textSize="24sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/subscriptionMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/subscriptionDuration"
            android:layout_alignParentStart="true"
            android:text="Oon until Jaunarasdasddasdasd asd asdasdda sdasd asda sd as da sd as da sd a sd as d as d as d asdasdasday 2020"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textSize="16sp"
            android:textStyle="italic" />
    </RelativeLayout>

</RelativeLayout>

我认为我想要实现的布局是显而易见的,但我还是会解释一下。

布局是为了概述我的应用中提供的订阅。

  • 左上角的订阅持续时间,持续时间下方有更多详细信息(可以多行显示)。

  • 右上角的订阅价格,低于价格所用的货币。

问题

我有 2 个RelativeLayouts 作为左右布局。左侧布局应能够根据屏幕大小进行缩放,而右侧布局应保持为wrap_content 宽度。

将当前右侧的RelativeLayout 和子级设置为wrap_content,看起来左侧的RelativeLayout 只是简单地重叠并强制下方的右侧布局,即使设置了android:layout_alignParentTop="true"android:layout_alignParentEnd="true"

我不确定是什么导致了问题,但我们将不胜感激。

【问题讨论】:

    标签: android android-layout textview android-relativelayout


    【解决方案1】:

    无需为此使用嵌套RelativeLayout

    您可以使用单个RelativeLayout

    试试这个

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    
    
        <TextView
            android:id="@+id/subscriptionDuration"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentStart="true"
            android:layout_alignParentTop="true"
            android:layout_toStartOf="@id/subscriptionCost"
            android:text="2 Year Subscription"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textSize="24sp"
            android:textStyle="bold" />
    
        <TextView
            android:id="@+id/subscriptionCost"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentTop="true"
            android:layout_alignParentEnd="true"
            android:text="$ 0.00"
            android:textAlignment="textEnd"
            android:textSize="24sp" />
    
    
        <TextView
            android:id="@+id/subscriptionMessage"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/subscriptionDuration"
            android:layout_alignParentStart="true"
            android:layout_toStartOf="@id/currency"
            android:text="Oon until Jaunarasdasddasdasd asd asdasdda sdasd asda sd as da sd as da sd a sd as d as d as d asdasdasday 2020"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
            android:textSize="16sp"
            android:textStyle="italic" />
    
    
        <TextView
            android:id="@+id/currency"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@id/subscriptionCost"
            android:layout_alignParentEnd="true"
            android:text="(USD)"
            android:textAlignment="textEnd"
            android:textSize="16sp"
            android:textStyle="italic" />
    
    </RelativeLayout>
    

    输出

    【讨论】:

    • 当然可以,但是我的价格和货币没有对齐,消息文本将与价格限制重叠。这就是为什么我特别选择了RelativeLayout这对二人组,因为这看起来不太吸引人。
    • @KGCybeX 没听明白你能解释更多,你的预期输出是什么
    【解决方案2】:

    您好,经过一些检查,我建议您使用 ConstraintLayout: 这里是符合您要求的完整代码

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.constraint.ConstraintLayout
      xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">
    
    
      <TextView
        android:id="@+id/subscriptionDuration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:text="2 Year Subscription"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
        android:textSize="24sp"
        android:textStyle="bold"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    
      <TextView
    
        android:id="@+id/subscriptionMessage"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_below="@id/subscriptionDuration"
        android:layout_alignParentStart="true"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="Oon until Jaunarasdasddasdasd asd asdasdda sdasd asda sd as da sd as da sd a sd as d as d as d asdasdasday 2020"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
        android:textSize="16sp"
        android:textStyle="italic"
        app:layout_constraintEnd_toStartOf="@+id/currency"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/subscriptionDuration" />
    
    
      <TextView
        android:id="@+id/subscriptionCost"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentEnd="true"
        android:layout_marginEnd="8dp"
        android:text="$ 0.00"
        android:textAlignment="textEnd"
        android:textSize="24sp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="@+id/subscriptionDuration" />
    
      <TextView
        android:id="@+id/currency"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/subscriptionCost"
        android:layout_alignParentEnd="true"
        android:layout_marginTop="8dp"
        android:layout_marginEnd="8dp"
        android:text="(USD)"
        android:textAlignment="textEnd"
        android:textSize="16sp"
        android:textStyle="italic"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/subscriptionCost" />
    
    </android.support.constraint.ConstraintLayout>
    

    【讨论】:

    • 你确定吗?它将简单地覆盖wrap_contentmatch_parent。它对我的布局没有影响。
    猜你喜欢
    • 1970-01-01
    • 2011-10-30
    • 1970-01-01
    • 2014-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多