2010-12-12 12 views
5

Su Android, vorrei creare un pulsante che contiene altre viste. Ad esempio, qualcosa di simile:Come creare un pulsante che contiene più viste?

+---------------------------+ 
| Hello world! +-------+ | 
|     | image | | 
| Some more info +-------+ | 
+---------------------------+ 

Ma mi piacerebbe che fosse più flessibile di questo esempio specifico. Idealmente, il pulsante sarebbe semplicemente in grado di contenere un ViewGroup, in modo da poter implementare il suo layout in un file XML separato. Tuttavia, poiché Button estende View, ma non ViewGroup, ciò non sembra possibile.

C'è un modo per ottenere questo utilizzando i componenti standard di Android, o devo ricorrere a scrivere una classe pulsante personalizzato?


Come richiesto, alcuni esempi XML che fa il trucco:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:focusable="true" 
    android:clickable="true" 
    android:background="@android:drawable/btn_default"> 
    <TextView 
     android:id="@+id/name" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/primary_text_light"/> 
    <TextView 
     android:id="@+id/additional_line_1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/primary_text_light"/> 
    <TextView 
     android:id="@+id/additional_line_2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textColor="@android:color/primary_text_light"/> 
</LinearLayout> 

ho dovuto impostare il colore sui TextViews esplicitamente, altrimenti sarebbe quasi illeggibile (sono bianco per impostazione predefinita) . Ho recuperato l'identificativo dall'SDK: .../platforms/android-7/data/res/values/public.xml. Stranamente, primary_text_light dà testo nero, mentre primary_text_dark risultati in bianco ...

+0

25.3k rappresentante su SO e tu stai facendo questa domanda? Ti darò un suggerimento ... scrivi la tua classe ... o mi è mancato il punto? – Squonk

+7

Davvero? La reputazione implica che un individuo non possa mai rimanere bloccato in un posto e chiedere qualche consiglio? –

+0

Direi anche, creare la propria classe View (Group) personalizzata. –

risposta

4

Creare il layout del pulsante desiderato e impostarlo su android:background su @android:drawable/btn_default. Crea la vista più esterna che contiene il resto clickable e focusable e il gioco è fatto.

+0

interessante ... @Thomas: Se funziona, per favore condividi un breve esempio XML, sono molto interessato :) – WarrenFaith

+1

@WarrenFaith: Quel genere di cose funziona bene. Ho usato 'android: background =" @ android: drawable/edit_text "' impostato per un 'Button' per renderlo simile a' EditText'. (Evitate le convalide della data utilizzando un selettore di date :)) – Macarse

+0

@WarrenFaith: ho messo l'XML nella domanda. – Thomas

1

Non sono sicuro, ma hai provato la classe ImageButton? Immagino che dovresti essere in grado di impostare l'immagine sul lato destro e dovresti essere in grado di aggiungere un'etichetta anche con nuove linee.

[aggiornamento] Ho perso la parte "più flessibile". Se si desidera avere uno più flessibile, credo che sia necessario creare una propria implementazione con un proprio OnTouchListener per gestire tutti gli stati possibili e rilevare i clic.

0

Non vorrei creare una classe per questo. È solo uno RelativeLayout con due TextView se uno ImageView.

Come forse sapete, uno ViewGroup estende View e un View può avere listener di clic. Quindi è necessario creare il layout e impostare un ascoltatore di clic su di esso.

Il problema qui è come gestisci gli stati, puoi provare a usare @android:drawable/btn_default come sfondo come ha detto @ognian.

Problemi correlati