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>