2013-07-22 12 views
7

Mam niestandardową podklasę DialogPreference, w której chciałbym mieć RadioGroup z trzema przyciskami radiowymi. Pierwsze dwa są komponentami wanilii RadioButton z tytułami, ale na trzecim chciałbym umieścić na prawo po prostu EditText, aby móc wprowadzić niestandardową wartość, gdy ten przycisk jest wybrany.Dodawanie EditText obok RadioButton

Próbowałem umieścić trzeci przycisk w poziomie LinearLayout wraz z EditText, ale trzeci przycisk nie uczestniczy już w rodzicu 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

Próbowałem również dodanie tego LinearLayout programowo, ale nadal miał ten sam problem. Czy jest jakiś sposób, aby to zrobić, być może poprzez wyraźne powiadomienie rodzica RadioGroup o trzecim przycisku lub w jakiś sposób pozycjonowanie EditText odpowiednio bez używania poziomego ? W przeciwnym razie, myślę, że będę musiał napisać podklasę RadioButton, która powinna być prawdziwą imprezą!

+0

Co o RelativeLayout następnie Linear zawierający RadioGroup, a następnie po prostu umieść EditText obok trzeciego RadioButton na podstawie jego id atrybut. – TronicZomB

+0

Ponieważ "EditText" jest zupełnie innym widokiem, więc nie może być częścią "RadioGroup". Albo programowo "Włącz" i "Wyłącz", a trzeci kliknięty przycisk radiowy jest drogą do osiągnięcia czegoś podobnego. Mam nadzieję, że ją zdobędziesz. –

Odpowiedz

3

Powinieneś być w stanie zmienić swój układ macierzysty na RelativeLayout. Następnie należy podać swoją RadioGroup

android:orientation="vertical" 

następnie umieścić swój EditText obok i dostosowane do dołu RadioGroup. Nie próbowałem tego, ale coś takiego powinno zadziałać.

Aktualizacja

mam czasu, aby go przetestować. To wydaje się dawać wyjście szukasz

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

pamiętać, że również zmienić niektóre width s do wrap_content więc to do siebie pasują. Zmiana orientation z RadioGroup pionu eliminuje potrzebę dla LinearLayout

+0

Byłoby wspaniale, gdyby był sposób, aby to zrobić jak mój oryginalny post. Wyobraź sobie, że ktoś chciał na przykład "EditText" obok każdego "RadioButton". Bez względu na to wydaje się, że jest to praktyczne rozwiązanie dla mojej sprawy. Tylko czekam, czy ktoś inny przejdzie przez cudowne rozwiązanie, zanim zaakceptuje twoją jako odpowiedź. Dzięki! – mharper

+1

Tak, byłoby miło, gdyby coś było już wbudowane, ale AFAIK nie ma. W każdym razie nadal można to łatwo zrobić, używając 'alignToRightOf' w każdym z nich, używając' layout_below' i umieszczając każdy "EditText" poniżej poprzedniego.Nie ma za co. Rozumiem, że czekam, aby zobaczyć, czy dostaniesz coś lepszego. – 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> 

Jeśli chcesz edytować tekst wzdłuż boku każdego przycisku radiowy:

<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

Właściwości takie jak "android: layout_toRightOf" nie są dostępne z 'LinearLayout'. Również w twoim drugim rozwiązaniu 'RadioButton's zostanie wyjęte z' RadioGroup' – codeMagic