问题
Hey I am trying to make a notification for my file uploading notification. This is my XML: but it keeps giving me the error: Circular dependencies cannot exist in RelativeLayout. What am I doing wrong? I dont see anything wrong with it? I was also trying to make it look similar to the browser downloader
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="5dp">
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/left"
android:layout_toLeftOf="@+id/right">
<ImageView
android:id="@+id/status_icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
/>
<TextView
android:id="@+id/progress_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/status_icon"
android:text="0%"
/>
</RelativeLayout>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/right"
android:layout_toRightOf="@+id/left">
<TextView
android:id="@+id/status_text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
/>
<ProgressBar
android:id="@+id/status_progress"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/status_text"
android:progressDrawable="@android:drawable/progress_horizontal"
android:indeterminate="false"
android:indeterminateOnly="false"
/>
</RelativeLayout>
</RelativeLayout>
回答1:
RelativeLayout "left" is trying to lay itself out based on the location of RelativeLayout "right". This cannot be done, because as the exception says, it's circular. How can you park a car based on the parking of another car if that car is still moving?
Based on your xml file, I recommend you use LinearLayouts. There really isn't anything that you are doing here that can't be solved with two LL's and the parent RelativeLayout.
回答2:
Remove the line android:layout_toLeftOf="@+id/right". You are declaring left to be to the left of right, and then right to be to the right of left. Its a circular dependency because it does not know which element to lay out first.
回答3:
You try to refer two layouts each other in your layout. A part of codes shows as below,
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<RelativeLayout
android:id="@+id/left"
android:layout_toLeftOf="@+id/right" />
<RelativeLayout
android:id="@+id/right"
android:layout_toRightOf="@+id/left" />
</RelativeLayout>
It will occur circular dependency exception.
How to fix?
Set gravity type of one layout, Other layout refers this.
For this case, remove android:layout_toRightOf="@+id/left"
Because default layout gravity is left, then remove this line. It will be fine.
Have fun @.@
来源:https://stackoverflow.com/questions/9284659/why-am-i-getting-a-circulardependencyexception