2010-08-22 32 views
8

Tôi đang cố thêm huy hiệu vào một trong các nút Hoạt động của tôi. Ngay bây giờ tôi đang cố gắng làm xml. Nút với biểu tượng, nên trông như thế này:Định vị bong bóng huy hiệu ở phía trên bên trái của một nút

alt text

tôi đã thực hiện các bong bóng và các văn bản bên sử dụng một RelativeLayout:

<RelativeLayout android:layout_width="wrap_content" 
      android:layout_height="wrap_content"> 

      <ImageView android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:adjustViewBounds="true" 
       android:src="@drawable/badge" 
       android:layout_centerInParent="true"/> 

      <TextView android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:textStyle="bold" 
         android:text="2" 
         android:layout_centerInParent="true" /> 
     </RelativeLayout> 

Nhưng tôi không thể tìm thấy một cách để đặt nó ở đó và làm cho nó hoạt động trên chân dung và phong cảnh với cùng một xml.

Các Buttoms trong Activity là như thế này:

<Button android:id="@+id/new_releases_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/ic_button_selector" 
      android:text="@string/new_releases_title" 
      android:textColor="#FFFFFF" 
      android:textSize="20sp" 
      android:gravity="center_vertical" 
      android:paddingLeft="12dp" 
      android:layout_marginTop="15dp" 
      android:layout_below="@id/coming_soon_button" 
      android:onClick="newReleaseClick" 
      android:layout_centerHorizontal="true" /> 

     <Button android:id="@+id/top_sellers_button" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:background="@drawable/ic_button_selector" 
      android:text="@string/top_sellers_title" 
      android:textColor="#FFFFFF" 
      android:textSize="20sp" 
      android:gravity="center_vertical" 
      android:paddingLeft="12dp" 
      android:layout_marginTop="15dp" 
      android:layout_below="@id/new_releases_button" 
      android:onClick="topSellersClick" 
      android:layout_centerHorizontal="true" /> 

và đây là hai nguồn:

alt text alt text

Làm thế nào tôi nên làm như xml?

EDIT: cách tiếp cận tốt nhất cho đến nay, nhưng nó vẫn không hoạt động:

<?xml version="1.0" encoding="utf-8"?> 

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent"> 

     <Button android:id="@+id/discounts_button" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:background="@drawable/ic_button_selector" 
       android:text="@string/discounts_title" 
       android:textColor="#FFFFFF" 
       android:textSize="20sp" 
       android:onClick="discountsClick" 
       android:layout_marginTop="40dp" 
       android:layout_marginLeft="20dp"/> 

     <RelativeLayout android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_gravity="top|left"> 

      <ImageView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:adjustViewBounds="true" 
        android:src="@drawable/badge" 
        android:layout_centerInParent="true"/> 

      <TextView android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:textStyle="bold" 
          android:text="20" 
          android:layout_centerInParent="true" /> 
     </RelativeLayout> 
</FrameLayout> 

Trả lời

7

Sử dụng một FrameLayout (thay vì RelativeLayout) và đặt nút và hình ảnh vào đó.

Chức vụ hình ảnh (cirle với số) và nút qua

android:layout_gravity="top|left" 
android:layout_marginTop="Xdp" 
android:layout_marginLeft="Xdp" 

để thích của bạn.

+0

này trông giống như cách chính xác nhưng tôi vẫn không thể làm cho nó làm việc. Có nghĩa là thêm 'marginTop' và' marginLeft' vào huy hiệu, nhưng chúng phải là số âm. Vị trí này bên ngoài khung nhìn. Vì vậy, thay vào đó, tôi đã thêm tích cực 'marginTop' và' marginLeft' vào nút, nhưng những giá trị đó bị bỏ qua. Tôi chưa hiểu tại sao. Tôi sẽ chỉnh sửa câu hỏi với cách tiếp cận tốt nhất từ ​​trước tới nay. – Macarse

+0

vâng, đúng. không có lề âm cho hình ảnh (mặc dù tôi đã không cố gắng nếu điều đó sẽ làm việc tốt), bạn có thể làm việc với các lề trên/trái cho cả hình ảnh và nút như bạn muốn. nhưng nó có ý nghĩa theo cách này: vị trí trên bên trái của FrameLayout là góc trên bên trái của hình ảnh, do đó bạn cần phải di chuyển nút một chút sang phải và xuống. –

+0

Cool, thêm 'android: layout_gravity =" top | left "' vào Button làm cho nó hoạt động, nhưng nó cắt nút vì chiều rộng và chiều cao của tôi từ bố mẹ tôi là "wrap_content". Tôi không muốn ép buộc thứ gì đó như 'android: layout_height =" 60dp "' trông đẹp. Bất kỳ ý tưởng nào về cách tốt hơn để giải quyết vấn đề này? – Macarse

3

Tôi muốn nói rằng nên dễ dàng với FrameLayout:

<FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" 
    android:layout_centerHorizontal="true" android:layout_marginTop="15dp"> 
     <FrameLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:padding="15dip"> 
     <Button android:id="@+id/new_releases_button" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:background="@drawable/ic_button_selector" 
     android:text="@string/new_releases_title" 
     android:textColor="#FFFFFF" 
     android:textSize="20sp" 
     android:gravity="center_vertical" 
     android:paddingLeft="12dp" 
     android:layout_below="@id/coming_soon_button" 
     android:onClick="newReleaseClick"/> 
    </FrameLayout> 
    <RelativeLayout android:layout_width="wrap_content" 
     android:layout_height="wrap_content"> 
     <ImageView android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:adjustViewBounds="true" 
      android:src="@drawable/badge" 
      android:layout_centerInParent="true"/> 
     <TextView android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textStyle="bold" 
        android:text="2" 
        android:layout_centerInParent="true" /> 
    </RelativeLayout> 
</FrameLayout> 

Có lẽ bạn sẽ cần phải điều chỉnh lợi nhuận.

EDIT:

Thêm android:layout_gravity="top|left" sẽ trông như thế này:

alt text

+0

Điều này không hiệu quả đối với tôi. Huy hiệu được nhìn thấy ở đầu nút và 'android: layout_marginTop' trông nó bị bỏ qua bằng cách nào đó. – Macarse

+0

Weird .. sau đó thử cập nhật xml trên câu trả lời (bạn có thể muốn điều chỉnh padding của FrameLayout nội bộ). Ngoài ra, hãy thử sử dụng RelativeLayout làm vùng chứa cấp cao thay vì FrameLayout. –

+0

hiện thêm android: layout_gravity = "top | center" vào cả hai nút và RelativeLayout tạo ra bất kỳ sự khác biệt nào? mã trông ok cho đến nay ngay từ cái nhìn đầu tiên. –

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