2013-07-22 22 views
7

Ho una sottoclasse personalizzata DialogPreference in cui mi piacerebbe avere uno RadioGroup con tre pulsanti di opzione. I primi due sono componenti di vaniglia RadioButton con titoli, ma per il terzo vorrei posizionare uno EditText direttamente a destra di esso in modo da poter inserire un valore personalizzato quando quel pulsante è selezionato.Aggiunta di EditText a RadioButton

Ho provato a inserire il terzo pulsante in uno LinearLayout orizzontale insieme allo EditText ma il terzo pulsante non partecipa più al genitore RadioGroup.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:orientation="vertical" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent"> 
    <RadioGroup 
      android:id="@+id/lactate_radio" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" > 

     <RadioButton 
       android:id="@+id/lactate_default_value" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/lactate_default_value"/> 

     <RadioButton 
       android:id="@+id/lactate_calibrated_value" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/lactate_calibrated_value" /> 
     <LinearLayout android:orientation="horizontal" 
         android:layout_width="match_parent" 
         android:layout_height="wrap_content"> 
      <RadioButton 
        android:id="@+id/lactate_custom_value" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:text="@string/lactate_custom_value"/> 

      <EditText 
        android:id="@+id/lactate_custom_value_edit_text" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content"/> 

     </LinearLayout> 
    </RadioGroup> 
</LinearLayout> 

Screenshot of custom DialogPreference

ho anche provato ad aggiungere questo LinearLayout a livello di codice, ma aveva ancora lo stesso comportamento. C'è un modo per farlo, forse dicendo esplicitamente al genitore RadioGroup circa il terzo pulsante o posizionando in qualche modo il EditText in modo appropriato senza utilizzare un LinearLayout orizzontale? Altrimenti, penso che dovrò scrivere una sottoclasse RadioButton che dovrebbe essere una vera festa!

+0

Che dire di un RelativeLayout quindi Linear contenente il RadioGroup e quindi posiziona EditText accanto al terzo RadioButton in base al suo id attributo. – TronicZomB

+0

Come 'EditText' è una vista completamente diversa quindi non può essere la parte' RadioGroup'. O è possibile "Abilitare" e "Disabilitare" a livello di programmazione mentre il terzo pulsante di scelta rapida è la strada da percorrere per ottenere qualcosa di simile. Spero che tu capisca –

risposta

3

Dovresti essere in grado di modificare il layout principale su RelativeLayout. Poi dare il vostro RadioGroup

android:orientation="vertical" 

quindi inserire il vostro EditText accanto e in linea con la parte inferiore del RadioGroup. Non l'ho provato, ma qualcosa del genere dovrebbe funzionare.

Aggiornamento

ho avuto il tempo di provarlo. Questo sembra dare l'output siete alla ricerca di

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:orientation="vertical" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent"> 
<RadioGroup 
     android:id="@+id/lactate_radio" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" > 

    <RadioButton 
      android:id="@+id/lactate_default_value" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="lactate_default_value"/> 

    <RadioButton 
      android:id="@+id/lactate_calibrated_value" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="lactate_calibrated_value" /> 
     <RadioButton 
       android:id="@+id/lactate_custom_value" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="lactate_custom_value"/> 
    </RadioGroup> 

     <EditText 
      android:id="@+id/lactate_custom_value_edit_text" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBottom="@+id/lactate_radio" 
      android:layout_toRightOf="@+id/lactate_radio" 
      android:text="Test Text" /> 
</RelativeLayout> 

Nota che ho anche cambiato alcuni dei width s per wrap_content quindi sarebbe bene insieme. Modifica della orientation del RadioGroup a verticale elimina la necessità per il LinearLayout

+0

Sarebbe bello se ci fosse un modo per fare questo come il mio post originale. Immagina se qualcuno volesse un "EditText" accanto ad ogni "RadioButton", per esempio. Indipendentemente da ciò, questa sembra essere una soluzione praticabile per il mio caso. Sto solo aspettando di vedere se qualcun altro arriva con una soluzione miracolosa prima di accettare la tua come La risposta. Grazie! – mharper

+1

Sì, sarebbe bello se ci fosse qualcosa già integrato per questo, ma AFAIK non lo è. Ad ogni modo, puoi ancora farlo facilmente usando 'alignToRightOf' in ognuno di questi usando' layout_below' e posiziona ogni 'EditText' sotto quello precedente.Prego e comprendo che aspetto di vedere se ottieni qualcosa di meglio – codeMagic

0
<LinearLayout 
    android:layout_height= "wrap_content" 
    android:layout_width= "wrap_content" 
    android:orientation= "horizontal" 
> 

<LinearLayout 
    android:layout_height= "wrap_content" 
    android:layout_width= "wrap_content" 
    android:orientation= "vertical" 
> 

<RadioGroup 
    <!-- radio buttons code here --> 
/> 

</LinearLayout> 

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

<EditText 

<!-- edit text code here --> 
    android:layout_alignBottom="@+id/id_ofRadioButton" 
    android:layout_toRightOf="@+id/id_ofRadioButton" 
/> 

</LinearLayout> 

Se si desidera modificare il testo lungo il lato ogni pulsante Radio:

<LinearLayout 
    android:layout_height= "wrap_content" 
    android:layout_width= "wrap_content" 
    android:orientation= "vertical" 
> 

<LinearLayout 
    android:layout_height= "wrap_content" 
    android:layout_width= "wrap_content" 
    android:orientation= "horizontal" 
> 

<RadioGroup 
    <!-- single radio button code here --> 
/> 

<EditText 

<!-- edit text code here --> 

/> 

</LinearLayout> 


<LinearLayout 
    android:layout_height= "wrap_content" 
    android:layout_width= "wrap_content" 
    android:orientation= "vertical" 
> 

<LinearLayout 
    android:layout_height= "wrap_content" 
    android:layout_width= "wrap_content" 
    android:orientation= "horizontal" 
> 

<RadioGroup 
    <!-- single radio button code here --> 
/> 

<EditText 

<!-- edit text code here --> 

/> 

</LinearLayout> 

+0

Proprietà come 'android: layout_toRightOf' non sono disponibili con' LinearLayout'. Inoltre, nella tua seconda soluzione, 'RadioButton's verrebbe rimosso dal' RadioGroup' – codeMagic