在RadioButton旁边添加EditText

时间:2013-07-22 18:50:25

标签: android android-edittext

我有一个自定义DialogPreference子类,我希望在其中有一个带有三个单选按钮的RadioGroup。前两个是带有标题的vanilla RadioButton组件,但是对于第三个我想直接在其右侧放置一个EditText,这样我就可以在选择该按钮时输入自定义值。

我已尝试将第三个按钮与LinearLayout一起放入水平EditText,但第三个按钮不再参与父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

我还尝试以编程方式添加此LinearLayout,但仍然具有相同的行为。有没有办法做到这一点,可能是通过明确地告诉父RadioGroup关于第三个按钮,或者通过某种方式适当地定位EditText而不使用水平LinearLayout?否则,我想我必须写一个RadioButton子类,它应该是一个真正的派对!

2 个答案:

答案 0 :(得分:4)

您应该可以将父级布局更改为RelativeLayout。然后提供RadioGroup

android:orientation="vertical"

然后将EditText放在旁边,并与RadioGroup的底部对齐。我没有尝试过,但这样的事情应该有效。

<强>更新

我有时间测试它。这似乎给你正在寻找的输出

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

请注意,我还将部分width更改为wrap_content,以便将它们组合在一起。将orientation的{​​{1}}更改为垂直,无需RadioGroup

答案 1 :(得分: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>

如果您想在每个单选按钮旁编辑文字

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