2013-07-22 19 views
7

Ich habe eine benutzerdefinierte DialogPreference Unterklasse, in der ich eine RadioGroup mit drei Radiobuttons haben möchte. Die ersten beiden sind Vanille RadioButton Komponenten mit Titeln, aber für die dritte möchte ich eine EditText direkt auf der rechten Seite davon platzieren, damit ich einen benutzerdefinierten Wert eingeben kann, wenn diese Schaltfläche ausgewählt ist.Hinzufügen von EditText neben RadioButton

Ich habe versucht, die dritte Taste in eine horizontale LinearLayout zusammen mit der EditText, aber dann die dritte Taste nicht mehr in der Elternteil RadioGroup teilnehmen.

<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

Ich habe auch versucht, diese LinearLayout programmatisch hinzugefügt hatte aber immer noch das gleiche Verhalten. Gibt es eine Möglichkeit, dies zu tun, indem Sie beispielsweise dem Elternteil RadioGroup über die dritte Taste explizit mitteilen oder die EditText auf geeignete Weise positionieren, ohne eine horizontale LinearLayout zu verwenden? Ansonsten denke ich, ich muss eine RadioButton Unterklasse schreiben, die eine echte Party sein sollte!

+0

Was ist mit einem RelativeLayout dann Linear, das die RadioGroup enthält und dann einfach den EditText neben dem dritten RadioButton basierend auf seiner ID platziert Attribut. – TronicZomB

+0

Da 'EditText' eine völlig andere Ansicht ist, kann es nicht' RadioGroup' sein. Entweder können Sie programmgesteuert 'Aktivieren' &' Deaktivieren', während das dritte Optionsfeld geklickt ist, den Weg, um etwas wie diese zu erreichen. Ich hoffe du bekommst es. –

Antwort

3

Sie sollten das übergeordnete Layout in RelativeLayout ändern können. Dann geben Sie Ihre RadioGroup

android:orientation="vertical" 

dann platzieren Sie Ihre EditText neben und mit dem Boden des RadioGroup ausgerichtet sind. Ich habe es nicht versucht, aber so etwas sollte funktionieren.

aktualisieren

habe ich Zeit, es zu testen. Dies scheint die Ausgabe, die Sie suchen

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

Hinweis zu geben, dass ich auch einige der width s zu wrap_content geändert, so würde es passen zusammen. Ändern des orientation der RadioGroup auf vertikale die Notwendigkeit für die LinearLayout

+0

Es wäre toll, wenn es eine Möglichkeit gäbe, das zu tun, wie mein ursprünglicher Post. Stellen Sie sich vor, jemand wollte zum Beispiel einen 'EditText' neben jedem' RadioButton'. Unabhängig davon scheint dies eine praktikable Lösung für meinen Fall zu sein. Ich warte nur darauf, zu sehen, ob jemand anderes eine Wunderlösung durchmacht, bevor er deine als Antwort akzeptiert. Vielen Dank! – mharper

+1

Ja, es wäre schön, wenn da schon etwas eingebaut wäre, aber AFAIK gibt es nicht. Wie auch immer, du könntest es immer noch leicht machen, indem du 'alignToRightOf' in jedem verwendest, dann' layout_below' verwendest und jeden 'EditText' unter den vorigen platzierst.Gern geschehen, und ich verstehe es zu warten, um zu sehen, ob Sie etwas besseres bekommen – 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> 

eliminiert Wenn Sie Text bearbeiten an der Seite von jeder Optionsfeld wollen:

<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

Eigenschaften wie 'android: layout_toRightOf' sind nicht mit einem' LinearLayout' verfügbar. Auch in Ihrer zweiten Lösung würden die RadioButtons aus der RadioGroup genommen – codeMagic

Verwandte Themen