2012-06-06 38 views
11

Hi im đang cố gắng tạo bố cục tùy chỉnh nhưng tôi đang cố gắng làm cho nó hoạt động bình thường Tôi gặp lỗi "phụ thuộc circluar không thể tồn tại trong bố cục tương đối"Bố cục tương đối Android lỗi phụ thuộc vòng tròn

heres what im cố gắng đạt được trong hạn ngạch bố cục và sau đó điền vào từng trường văn bản với dữ liệu.

date    number 
name score - score name 
scorers    scorers 

heres cố gắng của tôi

<?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="wrap_content" 
    android:background="@color/white" 
    android:paddingTop="30dp" 
    android:paddingBottom="30dp" > 



    <TextView 
     android:id="@+id/TextView04" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_below="@+id/HomeScore" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:text="-" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/blue" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/AwayTeam" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/TextView04" 
     android:layout_alignBottom="@+id/TextView04" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="22dp" 
     android:gravity="left" 
     android:text="Small Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/blue" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/HomeTeam" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/TextView04" 
     android:layout_alignBottom="@+id/TextView04" 
     android:layout_toRightOf="@+id/HomeScore" 
     android:gravity="right" 
     android:text="Small Text" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/blue" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/Attendance" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignRight="@+id/AwayTeam" 
     android:layout_alignTop="@+id/HomeScore" 
     android:text="Small Text" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <TextView 
     android:id="@+id/Division" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignBottom="@+id/textView1" 
     android:layout_toRightOf="@+id/HomeScore" 
     android:text="Small Text" 
     android:textAppearance="?android:attr/textAppearanceSmall" /> 

    <TextView 
     android:id="@+id/AwayScore" 
     android:layout_width="20dp" 
     android:layout_height="wrap_content" 
     android:layout_alignBaseline="@+id/TextView04" 
     android:layout_alignBottom="@+id/TextView04" 
     android:layout_toRightOf="@+id/TextView04" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/blue" 
     android:textStyle="bold" /> 

    <TextView 
     android:id="@+id/HomeScore" 
     android:layout_width="20dp" 
     android:layout_height="wrap_content" 

     android:layout_alignBottom="@+id/TextView04" 
     android:layout_marginRight="15dp" 
     android:layout_toLeftOf="@+id/TextView04" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/blue" 
     android:textStyle="bold" /> 

</RelativeLayout> 

heres lỗi

06-06 14:42:44.348: E/AndroidRuntime(1167): java.lang.IllegalStateException: Circular dependencies cannot exist in RelativeLayout 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.RelativeLayout$DependencyGraph.getSortedViews(RelativeLayout.java:1272) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.RelativeLayout.sortChildren(RelativeLayout.java:281) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:303) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.view.View.measure(View.java:8526) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.ListView.measureScrapChild(ListView.java:1153) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1266) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.ListView.onMeasure(ListView.java:1127) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.view.View.measure(View.java:8526) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:3224) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1017) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.TableLayout.measureChildBeforeLayout(TableLayout.java:456) 
06-06 14:42:44.348: E/AndroidRuntime(1167):  at android.widget.LinearLayout.measureVertical(LinearLayout.java:386) 

Trả lời

13

Vâng, bạn có một vài vấn đề ở đây:

  1. TextView04 tuyên bố android:layout_below="@+id/HomeScore"android:layout_centerVertical="true", mà xung đột

  2. AwayTeam tuyên bố android:layout_alignBaseline="@+id/TextView04"android:layout_alignBottom="@+id/TextView04", mà xung đột

  3. HomeTeam tuyên bố android:layout_alignBaseline="@+id/TextView04"android:layout_alignBottom="@+id/TextView04", xung đột nào

  4. AwayScore tuyên bố android:layout_alignBaseline="@+id/TextView04"android:layout_alignBottom="@+id/TextView04", mà xung đột

Như Samir chỉ ra, ít nhất là một trong những phụ thuộc vòng tròn của bạn là giữa TextView04HomeScore. TextView04 cho biết nó nằm dưới HomeScoreHomeScore cho biết đáy của nó được căn chỉnh với phần dưới cùng của TextView04. Tuy nhiên, một số khác tôi lưu ý ở trên cũng có thể tạo phụ thuộc vòng tròn. Đảm bảo rằng hai tiện ích không cố gắng hạn chế trên cùng một trục (như trong TextView04HomeScore).

+0

"Đảm bảo rằng mỗi tiện ích chỉ tự ràng buộc một lần trong mỗi trục" Không phải là thông thường để hạn chế giữa hai chế độ xem trong trục nếu bạn muốn lấp đầy khu vực giữa chúng? – Barak

+0

@Barak: Bạn nói đúng - câu chuyện phức tạp hơn tôi đã chỉ ra. Tôi đã xóa đoạn đó khỏi câu trả lời của tôi. Cảm ơn! – CommonsWare

7

Di android:layout_below="@+id/HomeScore" từ TextView đầu tiên trong cách bố trí của bạn nó tạo ra phụ thuộc vòng tròn.

Tại sao?

Bởi vì bạn thiết lập android:layout_alignBottom="@+id/TextView04" trong TextView có id là TextView android:id="@+id/HomeScore" .và đầu tiên (TextView04) cũng đã android:layout_below="@+id/HomeScore".

<TextView 
     android:id="@+id/TextView04" 
     android:layout_width="20dp" 
     android:layout_height="20dp" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:text="-" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/blue" 
     android:textStyle="bold" /> 
+0

cảm ơn bạn - chỉ dành cho mục đích học tập là một ngoại lệ tròn –

+0

xem tại sao phụ thuộc vòng tròn ... –

1

Bạn có một sai lầm nhỏ có thể là lý do:

Khi bạn tham khảo để id khác, không sử dụng @+id/... chỉ @id/.... Vì vậy, ở mọi nơi ngoại trừ thuộc tính android:id, + phải được xóa.

Sau khi bạn đã làm điều đó, bạn có thể nhận được một số cảnh báo chỉ đến lỗi có thể xảy ra!

+5

Điều đó không chính xác.* Lần xuất hiện đầu tiên * của một ID nhận '+', ngay cả khi nó xảy ra trước 'android: id'. Ví dụ: xem: https://github.com/commonsguy/cw-omnibus/blob/master/Containers/Relative/res/layout/main.xml – CommonsWare

+0

Nếu bạn không phiền, hãy cho tôi "bằng chứng" chính thức. – WarrenFaith

+1

'RelativeLayout' đã hỗ trợ các tham chiếu chuyển tiếp như thế này trong gần ba năm: http://android-developers.blogspot.com/2009/10/ui-framework-changes-in-android-16.html – CommonsWare

Các vấn đề liên quan