2012-05-01 34 views
25

Tôi có kinh nghiệm với RelativeLayout nhưng tôi chưa bao giờ chạy qua một cách để giải quyết vấn đề tôi đã trình bày (ngoài các giá trị ký quỹ cứng mà tôi muốn . để tránh)Android RelativeLayout căn giữa của một chế độ xem ở góc trên cùng bên phải của chế độ xem khác

tôi muốn cố gắng tạo ra một cái gì đó giống như hình ảnh sau đây trong một RelativeLayout:

enter image description here

hộp Chế độ xem riêng của mình và tôi muốn để có được Xem có chứa vòng tròn màu cam được căn giữa ở góc trên cùng bên phải của Chế độ xem có chứa hộp màu xanh lam.

Tôi đã thử với android:alignTop="boxView"android:alignRight="boxView" nhưng điều đó đặt vòng tròn màu cam của tôi hoàn toàn trong hộp của tôi. Tôi muốn nó được như vậy mà vòng tròn là trung tâm trên góc trên bên phải của hộp.

Bất kỳ ai biết cách tôi có thể nhận kết quả đó bằng RelativeLayout? tốt nhất là không cần phải cố định lề cứng ra khỏi cạnh của màn hình để xem dấu chấm màu da cam.

+0

Tại sao bạn không muốn sử dụng ký quỹ cho điều này. Margin có vẻ như là cách hoàn hảo để thực hiện điều này. – Bobbake4

+0

Tôi chỉ không muốn cho nó một lề cho cách xa cạnh của màn hình. Nếu tôi có thể sắp xếp nó vào hộp và sau đó dịch chuyển nó lên và lên một nửa đường kính của nó với một lề đó sẽ là lý tưởng thực sự. Nhưng tôi chỉ có thể tìm ra cách để làm điều đó bằng cách nói cho nó cách xa mép của màn hình, thay vì cách xa điểm tôi muốn căn chỉnh. – FoamyGuy

Trả lời

29

Mã này tạo ra những gì bạn đang tìm kiếm nhưng sử dụng lề. Bây giờ bạn có thể thiết lập lề trong mã nếu đây là cấu trúc động mà bạn đang tạo. Như bạn có thể thấy tôi đã sử dụng lề âm để di chuyển hình dạng bên phải phía trên bên ngoài hộp màu xanh lam. Chúng cần phải bằng một nửa chiều cao của vòng tròn mà bạn đang cố di chuyển. Bạn có thể thực hiện tất cả điều này trong mã để căn giữa vòng tròn ở góc trên bên phải.

<?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/linearLayout1" 
      android:layout_width="100dp" 
      android:layout_height="100dp" 
      android:layout_alignParentBottom="true" 
      android:layout_alignParentLeft="true" 
      android:background="#0000FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

     <LinearLayout 
      android:layout_width="26dp" 
      android:layout_height="26dp" 
      android:layout_alignRight="@+id/linearLayout1" 
      android:layout_alignTop="@+id/linearLayout1" 
      android:layout_marginRight="-13dp" 
      android:layout_marginTop="-13dp" 
      android:background="#FF00FF" 
      android:orientation="vertical" > 
     </LinearLayout> 

    </RelativeLayout> 
+3

Không biết về lợi nhuận tiêu cực. Hoàn hảo cảm ơn bạn. – FoamyGuy

+0

Lưu ý rằng điều này không thực sự hiệu quả nếu chế độ xem thứ hai được kích thước bởi một hình ảnh, vì các bản vẽ không có kích thước nhất quán trong DP (kích thước pixel của chúng nhảy từ một nhóm DPI sang nhóm tiếp theo thay vì mở rộng liên tục). Vì vậy, bạn không thể chỉ làm 26dp/2 = 13dp. Một giải pháp khác là chọn kích thước chắc chắn lớn hơn hình ảnh và thêm bố cục bao quanh xung quanh chế độ xem với kích thước xác định (với chế độ xem ban đầu ở giữa), sau đó bạn có thể tính một nửa. – Karu

+0

Lợi nhuận tiêu cực! Vâng! – RexSplode

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