2016-02-10 101 views
1

我的問題是,我想要一個無線電組,有3個單選按鈕,使用下面的方案。 三個選擇是: 1雄性 2雌性 3. []自定義:(自我描述的同一性)Android Radio Button Group with EditText嵌入

然而,問題是,我希望用戶輸入他們自 - 描述身份到一個EditText中供我檢索。

所以下面的代碼來自我的XML頁面,有些元素被「####」屏蔽掉了。

<RadioGroup 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_below="####" 
    android:id="@+id/male_female_custom_choice" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true"> 
    <RadioButton android:id="@+id/radio_button_male" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/radio_button_male" 
     android:checked="true" /> 
    <RadioButton android:id="@+id/radio_button_female" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/radio_button_female" 
     android:checked="false" /> 
    <LinearLayout 
     android:orientation="horizontal" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="####" 
     android:weightSum="1"> 
      <RadioButton 
       android:id="@+id/radio_button_custom" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:text="@string/radio_button_custom" 
       android:checked="false" /> 
      <EditText 
       android:layout_width="0dp" 
       android:layout_height="wrap_content" 
       android:inputType="text" 
       android:ems="10" 
       android:id="####" 
       android:hint="####" 
       android:focusableInTouchMode="true" 
       android:gravity="center" 
       android:layout_weight="1.05" 
       android:textSize="14sp" /> 
      <TextView 
       android:layout_width="42dp" 
       android:layout_height="43dp" 
       android:textAppearance="?android:attr/textAppearanceMedium" 
       android:text="####" 
       android:id="####" 
       android:singleLine="true" 
       android:gravity="center" 
       android:layout_marginLeft="0dp" 
       android:textColor="#000000" /> 
    </LinearLayout> 
</RadioGroup> 

正如您所看到的,我嘗試使用LinearLayout來隔離自定義選項。 但是,有意想不到的副作用。 1.除其他2個預定義性別外,還可以選擇自定義選項。 2.自定義選項不能自行選擇。

在該活動的實際的Java文件,我有以下代碼:

// button, radio button, editText, and Spinner fields 
public EditText mEdit; 
public RadioButton rButton; 
public RadioGroup rSexGroup; 
rSexGroup = (RadioGroup)findViewById(R.id.male_female_custom_choice); 
// get selected radio button from RadioGroup 
int selectedId = rSexGroup.getCheckedRadioButtonId(); 
// find radio button by returned id 
rButton = (RadioButton)findViewById(selectedId); 
// assign gender based on id of radio button 
if (selectedId == 1) { 
    pat.gender = "male"; 
} 
if (selectedId == 2) { 
    pat.gender = "female"; 
} 
if (selectedId == 3) { 
    mEdit = (EditText)findViewById(R.id.####); 
    pat.gender = (mEdit.getText().toString()); 
} 

由於我與Java有點生疏了,有可能是我有一些非常newbish錯誤。請指教。

再次,我正在尋找一種方法來獲取一組3個RadioButtons,每個單獨一行,最後一個RadioButton與EditText相鄰,從中獲取所需的信息。

編輯:這裏是什麼,我希望它看起來像一個畫面: (http://i68.tinypic.com/ao2oow.png

不幸的是,我需要10的聲譽,發佈圖片。 :(

莫希特的答案給的EditText在另一條線路比自定義輸入。 (http://i63.tinypic.com/68u88x.png

請注意,EditText上的方向是相鄰的習慣,並沒有下文。我不道歉明確規定不夠我想要的東西。

+2

哪裏是鏈接或代碼? –

+0

只是增加了他們 – DLuciferin

+0

https://docs.google.com/document/d/1IwIErvZ7NBiqZ3e6ZHqQn_ajUihU3GB7gfCHUhSuDbQ/edit?usp=sharing – DLuciferin

回答

2
  1. 因爲selectedId不會1,2或3 ....調試它你會得到價值..

自定義選項不能自行選擇。

  • LinearLayout刪除您的第3 RadioButton和替換下面第二RadioButton,並把你EditTextTextViewLinearLayout ..
  • 在你收聽得到getCheckedRadioButtonIdgetText()RadioButton,並相應地檢查它...

    我不是什麼是你的任務,但這裏是如何得到所有三個RadioButton工作,並獲得自定義文本太....

    XML ...

    UPDATE

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.ex.MainActivity" > 
    
    <RadioGroup 
        android:id="@+id/male_female_custom_choice" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:orientation="vertical" > 
    
        <RadioButton 
         android:id="@+id/radio_button_male" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:checked="true" 
         android:text="Male" /> 
    
        <RadioButton 
         android:id="@+id/radio_button_female" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:checked="false" 
         android:text="FeMale" /> 
    
        <RadioButton 
         android:id="@+id/radio_button_custom" 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:checked="false" 
         android:text="Custom" /> 
    </RadioGroup> 
    
    <LinearLayout 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_alignBottom="@+id/male_female_custom_choice" 
        android:layout_toRightOf="@+id/male_female_custom_choice" 
        android:orientation="horizontal" 
        android:weightSum="1" > 
    
        <EditText 
         android:id="@+id/edit" 
         android:layout_width="0dp" 
         android:layout_height="wrap_content" 
         android:layout_weight=".8" 
         android:ems="10" 
         android:focusableInTouchMode="true" 
         android:gravity="center" 
         android:hint="aa" 
         android:inputType="text" 
         android:textSize="14sp" /> 
    
        <TextView 
         android:id="@+id/text" 
         android:layout_width="42dp" 
         android:layout_height="43dp" 
         android:layout_marginLeft="0dp" 
         android:layout_weight=".2" 
         android:gravity="center" 
         android:singleLine="true" 
         android:text="aaa" 
         android:textAppearance="?android:attr/textAppearanceMedium" 
         android:textColor="#000000" /> 
    </LinearLayout> 
    
    <Button 
        android:id="@+id/but" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:layout_below="@+id/male_female_custom_choice" 
        android:text="Get" /> 
    
    </RelativeLayout> 
    

    java文件..

    public class MainActivity extends Activity { 
    
    public EditText mEdit; 
    public RadioButton rButton; 
    public RadioGroup rSexGroup; 
    public Button but; 
    public String str = ""; 
    
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_main); 
        rSexGroup = (RadioGroup)findViewById(R.id.male_female_custom_choice); 
        but= (Button) findViewById(R.id.but); 
    
        but.setOnClickListener(new View.OnClickListener() { 
    
         @Override 
         public void onClick(View v) { 
          int selectedId = rSexGroup.getCheckedRadioButtonId(); 
          rButton = (RadioButton)findViewById(selectedId); 
          if (rButton.getText().toString().equals("Male")) { 
           str = "Male"; 
          } 
          if (rButton.getText().toString().equals("FeMale")) { 
           str = "FeMale"; 
          } 
          if (rButton.getText().toString().equals("Custom")) { 
           mEdit = (EditText)findViewById(R.id.edit); 
           str = mEdit.getText().toString(); 
          } 
          Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show(); 
         } 
        }); 
        } 
    } 
    

    你也可以設置爲LinearLayout的可見性,以便它只在檢查時自定義時纔可見....

    希望有幫助..

    +0

    我可以理解Java代碼背後的原因,它是非常有用的。但是,XML代碼並不適合我的目的(我附加了圖片以顯示我想要的內容,並與您的XML代碼顯示的內容進行比較)。有沒有辦法調整代碼並移動元素,使它像我想要的顯示更緊湊? – DLuciferin

    +0

    RelativeLayout的問題似乎是我無法將EditText放在與「Custom」RadioButton相同的行上。我正在尋找一種方法將他們放在同一條線上。 – DLuciferin

    +0

    你可以通過將LinearLayout Rightof Radiobutton和alignBottom與它一起實現你想要的(在圖片中)。 – Mohit

    1
    • 放收音機組RelativeLayout
    • 設置第三radiobutton文本空/空
    • 添加EditText作爲alignParentBottom="true"
    • 現在編程方式調用的EditText的onFocusChangeListener

    edittext.setOnFocusChangeListener(新View.OnFocusChangeListener(){

     @Override 
    
         public void onFocusChange(View view, boolean b) { 
          if(b) 
           thirdRadio.setCheched(true); 
         } 
        });