2010-08-22 13 views
8

Ich versuche, einer Schaltfläche meiner Aktivität eine Plakette hinzuzufügen. Im Moment versuche ich das XML zu machen. Der Button mit dem Abzeichen, soll wie folgt aussehen:Positionieren einer Plakettenblase auf der linken oberen Seite einer Schaltfläche

alt text

Ich habe bereits die Blase und den Text fertig innen mit einem 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> 

Aber ich kann nicht einen Weg finden um es dort zu platzieren und es mit demselben XML auf Hoch- und Querformat arbeiten zu lassen.

Die Buttoms im Activity sind wie folgt aus:

<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" /> 

und hier sind die beiden Quellen:

alt text alt text

Wie soll ich die xml tun?

EDIT: beste Ansatz so weit, aber es immer noch nicht funktioniert:

<?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> 

Antwort

7

Verwenden Sie ein FrameLayout (statt RelativeLayout) und in sie Knopf und Bild setzen.

Position das Bild (cirle mit Nummer) und Taste über

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

auf Ihre Vorlieben.

+0

Dies sieht aus wie der richtige Weg, aber ich kann immer noch nicht damit es funktioniert. Es ist sinnvoll, dem Abzeichen "marginTop" und "marginLeft" hinzuzufügen, sie sollten jedoch negativ sein. Dies positioniert es außerhalb der Sicht. Stattdessen habe ich der Schaltfläche "marginTop" und "marginLeft" hinzugefügt, aber diese Werte werden ignoriert. Ich konnte noch nicht verstehen warum. Ich werde die Frage mit dem besten Ansatz bisher bearbeiten. – Macarse

+0

ja, richtig. kein negativer Rand zum Bild (obwohl ich nicht versucht habe, wenn das auch so gut funktionieren würde), können Sie mit dem oberen/linken Rand für Bild und Knopf arbeiten, wie Sie mögen. aber es macht Sinn auf diese Weise: Die obere linke Position des FrameLayout ist die obere linke Ecke des Bildes, deshalb müssen Sie den Knopf ein wenig nach rechts und unten bewegen. –

+0

Cool, das Hinzufügen von 'android: layout_gravity =" top | left "' zum Button hat es funktioniert, aber es schneidet den Button ab, da meine Breite und Höhe von meinem Elternteil "wrap_content" sind. Ich möchte nicht etwas wie 'android: layout_height =" 60dp "erzwingen, was gut aussieht. Irgendeine Idee von einem besseren Weg, um das zu lösen? – Macarse

3

Ich würde sagen, dass mit FrameLayout einfach sein sollte:

<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> 

Wahrscheinlich müssen Sie Ränder einstellen.

EDIT:

die android:layout_gravity="top|left" Hinzufügen wird wie folgt aussehen:

alt text

+0

Das hat nicht für mich funktioniert. Das Abzeichen ist oben auf dem Knopf zu sehen, und das 'android: layout_marginTop' sieht aus, als würde es irgendwie ignoriert. – Macarse

+0

Seltsam .. dann versuchen, aktualisierte xml auf die Antwort (Sie möchten möglicherweise Padding von internen FrameLayout anpassen). Versuchen Sie auch, RelativeLayout als Container der obersten Ebene anstelle von FrameLayout zu verwenden. –

+0

fügt das Hinzufügen von android: layout_gravity = "top | center" zu Button und RelativeLayout einen Unterschied? Code sieht auf den ersten Blick ok aus. –

Verwandte Themen