Android RelativeLayout中不能存在循环依赖项

Android RelativeLayout中不能存在循环依赖项,android,android-relativelayout,Android,Android Relativelayout,我正在将视图渲染为位图。我需要一个气球,根据它是否适合屏幕,在顶部或底部有一个指针。为此,我使用了一个RelativeLayout,因为我需要指针部分位于气球上方: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content"

我正在将视图渲染为
位图
。我需要一个气球,根据它是否适合屏幕,在顶部或底部有一个指针。为此,我使用了一个
RelativeLayout
,因为我需要指针部分位于气球上方:

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

    <LinearLayout android:id="@+id/balloon_body"
        android:layout_width="@dimen/pins_details_balloon_width"
        android:layout_height="wrap_content"
        android:layout_marginTop="-1dp"
        android:layout_marginBottom="-1dp"
        android:layout_below="@+id/pointer_top"
        android:orientation="vertical"
        >

        <TextView android:id="@android:id/title"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            />

        <TextView android:id="@android:id/text1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="4dp"
            />

    </LinearLayout>

    <ImageView android:id="@id/pointer_top"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

    <ImageView android:id="@+id/pointer_bottom"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/balloon_body"
        />

</RelativeLayout>
此代码在视图上崩溃。具有循环依赖项的度量(…)不能存在于RelativeLayout错误中。我尝试了不同的LayoutParams(没有setLayoutParams(…)度量值(…)崩溃并出现空指针异常)、不同的View.MeasureSpec-s,但没有成功。如果我在最后一个ImageView中删除android:layout_below=“@id/balloon_body”,它会工作,但底部指针位于顶部

我不能使用LinearLayout,因为我需要这些指针位于气球主体上方,而使用LinearLayout时,顶部指针将位于气球主体下方。问题在哪里?我如何实现我的目标?

试试这个

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

 <ImageView android:id="@id/pointer_top"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    />
<LinearLayout android:id="@+id/balloon_body"
    android:layout_width="@dimen/pins_details_balloon_width"
    android:layout_height="wrap_content"
    android:layout_marginTop="-1dp"
    android:layout_marginBottom="-1dp"
    android:layout_below="@+id/pointer_top"
    android:orientation="vertical"
    >

    <TextView android:id="@android:id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        />

    <TextView android:id="@android:id/text1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="4dp"
        />

</LinearLayout>
<ImageView android:id="@+id/pointer_bottom"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/balloon_body"
    />


由于布局参数中存在循环引用,因此导致该问题

例如,当视图B是视图A下方的布局_时,视图A不能再在其下方、右对齐等位置引用视图B。这也可能存在于多个视图之间:A引用B引用C。在该场景中,由于循环依赖关系,C不能引用A

有关更多信息,请转到:


希望有帮助

如果在相对布局中使用圆形背景(可绘制形状),则会抛出该错误


删除该形状或更改布局

圆形相关性表示两个连续视图,它们在位置上相互依赖

例如:

 <android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tabs"
    android:layout_above="@id/orderpaylayout"
    />

<Button
    android:id="@+id/orderbutton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_margin="20dp"
    android:layout_centerInParent="true"
    android:background="@drawable/orderbuttonstyle"
    android:text="@string/order"
    android:textSize="16sp"
    android:textStyle="bold"
    android:visibility="gone" />

<Button
    android:id="@+id/paybutton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:text="@string/Pay"
    android:textColor="#ffffff"
    android:textSize="16sp"
    android:visibility="gone"
    android:layout_below="@id/viewPager
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:background="@drawable/paybuttonstyle"
    />


您应该考虑交换<代码> @ Pankaj Singh,它将产生与<代码>线性布局< /代码>相同的问题,顶部指针将位于气球下方,而不是气球上方。@shell将ImageView上方替换为这两个
ImageView
s都必须位于
@shell上方xml的下方是好的,因为我看到线性布局在两个ImageView的中间请发布答案,参考资料。
 <android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tabs"
    android:layout_above="@id/orderpaylayout"
    />

<Button
    android:id="@+id/orderbutton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_margin="20dp"
    android:layout_centerInParent="true"
    android:background="@drawable/orderbuttonstyle"
    android:text="@string/order"
    android:textSize="16sp"
    android:textStyle="bold"
    android:visibility="gone" />

<Button
    android:id="@+id/paybutton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:text="@string/Pay"
    android:textColor="#ffffff"
    android:textSize="16sp"
    android:visibility="gone"
    android:layout_below="@id/viewPager
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:background="@drawable/paybuttonstyle"
    />
 <android.support.v4.view.ViewPager
    android:id="@+id/viewPager"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/tabs"
    android:layout_above="@id/orderpaylayout"
    />

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

<Button
    android:id="@+id/orderbutton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_margin="20dp"
    android:layout_centerInParent="true"
    android:background="@drawable/orderbuttonstyle"
    android:text="@string/order"
    android:textSize="16sp"
    android:textStyle="bold"
    android:visibility="gone" />

<Button
    android:id="@+id/paybutton"
    android:layout_width="match_parent"
    android:layout_height="60dp"
    android:layout_centerInParent="true"
    android:text="@string/Pay"
    android:textColor="#ffffff"
    android:textSize="16sp"
    android:visibility="gone"
    android:textStyle="bold"
    android:layout_margin="20dp"
    android:background="@drawable/paybuttonstyle"
    />
</RelativeLayout>