今天在项目中用到了android中常用的RadioGroup、RadioButton、Spinner、EditText等控件,在此介绍一下它们的用法,希望对需要的朋友有帮助,
android中RadioGroup、RadioButton、Spinner、EditText用法详解(含示例截图和源代码)
。一、RadioGroup和RadioButton的使用
RadioButton就是我们常见的单选按钮,一个RadioGroup可以包含多个单选按钮,但是每次只能选择其中的一个值。
我们先看一下布局文件:
<span><radiogroup android:contentdescription="@string/ignore_quick_response" android:id="@+id/quickResponseRG" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"><radiobutton android:id="@+id/yesRadioButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/ignore_yes" android:textsize="22sp"><radiobutton android:id="@+id/noRadioButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/ignore_no" android:textsize="22sp"></radiobutton></radiobutton></radiogroup></span>再来看一下RadioGroup的 接口:RadioGroup.OnCheckedChangeListener
public interface OnCheckedChangeListener { /** *Called when the checked radio button has changed. When the * selection is cleared, checkedId is -1.
* * @param group the group in which the checked radio button has changed * @param checkedId the unique identifier of the newly checked radio button */ public void onCheckedChanged(RadioGroup group, int checkedId); } 我们需要实现RadioGroup.OnCheckedChangeListener接口,重写onCheckedChanged(RadioGroup group, int checkedId)函数,参数group指定添加 的RadioGroup,参数checkedId指定选中的RadioButton的ID。二、Spinner的使用
Spinner是下拉列表选择框,可以绑定数据源,数据源可以在程序中定义,也可以在values/strings中定义字符串数组,还可以在数据库中查询获取。
布局很简单,详见后面的例子。
绑定数据源:
String[] intervalTime = getResources().getStringArray(R.array.intervalTime); ArrayAdapter<string>adapter = new ArrayAdapter<string>(this, android.R.layout.simple_spinner_item, intervalTime); bstIntervalSpinner.setAdapter(adapter);</string></string>设置 接口:AdapterView.OnItemSelectedListener
public interface OnItemSelectedListener { /** *Callback method to be invoked when an item in this view has been * selected. This callback is invoked only when the newly selected * position is different from the previously selected position or if * there was no selected item.
* * Impelmenters can call getItemAtPosition(position) if they need to access the * data associated with the selected item. * * @param parent The AdapterView where the selection happened * @param view The view within the AdapterView that was clicked * @param position The position of the view in the adapter * @param id The row id of the item that is selected */ void onItemSelected(AdapterViewparent, View view, int position, long id); /** * Callback method to be invoked when the selection disappears from this * view. The selection can disappear for instance when touch is activated * or when the adapter becomes empty. * * @param parent The AdapterView that now contains no selected item. */ void onNothingSelected(AdapterViewparent); } 我们需要实现AdapterView.OnItemSelectedListener接口,重写onItemSelected(AdapterViewparent, View view, int position, long id)方法。三、EditText的使用
EditText很常见,用来输入文本,给它添加 可以实时监测已经输入的文本内容,包括查看是否有错误、输入是否符合规范、长度是否超出了范围。
添加 :
powerEditText.addTextChangedListener(editTextListener);实现TextWatcher接口:
public interface TextWatcher extends NoCopySpan { /** * This method is called to notify you that, within<code>s</code>, * the<code>count</code>characters beginning at<code>start</code>* are about to be replaced by new text with length<code>after</code>. * It is an error to attempt to make changes to<code>s</code>from * this callback. */ public void beforeTextChanged(CharSequence s, int start, int count, int after); /** * This method is called to notify you that, within<code>s</code>, * the<code>count</code>characters beginning at<code>start</code>* have just replaced old text that had length<code>before</code>. * It is an error to attempt to make changes to<code>s</code>from * this callback. */ public void onTextChanged(CharSequence s, int start, int before, int count); /** * This method is called to notify you that, somewhere within *<code>s</code>, the text has been changed. * It is legitimate to make further changes to<code>s</code>from * this callback, but be careful not to get yourself into an infinite * loop, because any changes you make will cause this method to be * called again recursively. * (You are not told where the change took place because other * afterTextChanged() methods may already have made other changes * and invalidated the offsets. But if you need to know here, * you can use {@link Spannable#setSpan} in {@link #onTextChanged} * to mark your place and then look up from here where the span * ended up. */ public void afterTextChanged(Editable s);}我们可以根据需要重写beforeTextChanged(CharSequence s, int start, int count, int after)、onTextChanged(CharSequence s, int start, int before, int count)、afterTextChanged(Editable s)这三个方法。四、示例和源代码
先上效果图:
在上图中,有3个RadioGroup、2个Spinner和1个EditText,由于程序中设置了 ,所以上面选项设置的值都会在分割线下面实时显示出结果。
源代码:
布局文件:
<li><li><textview android:id="@+id/ignoreTextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/ignore_quick_response" android:textsize="22sp"><radiogroup android:contentdescription="@string/ignore_quick_response" android:id="@+id/quickResponseRG" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"><radiobutton android:id="@+id/yesRadioButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/ignore_yes" android:textsize="22sp"><radiobutton android:id="@+id/noRadioButton" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/ignore_no" android:textsize="22sp"></radiobutton></radiobutton></radiogroup></textview></linearlayout><li><textview android:id="@+id/BSTintervalTV" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/BST_interval" android:textsize="22sp"><spinner android:id="@+id/BSTintervalSpinner" android:layout_height="wrap_content" android:layout_width="wrap_content"></spinner></textview></linearlayout><li><textview android:id="@+id/trans_retry" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/trans_retry_interval" android:textsize="22sp"><spinner android:id="@+id/transRetrySpinner" android:layout_height="wrap_content" android:layout_width="wrap_content"></spinner></textview></linearlayout><li><textview android:id="@+id/powerTV" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/power" android:textsize="22sp"><edittext android:id="@+id/powerEditText" android:inputtype="text" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/default_power" android:textsize="22sp"><textview android:id="@+id/powerRangeTextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/power_range" android:textsize="22sp"></textview></edittext></textview></linearlayout><li><textview android:id="@+id/channelTextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/channel_num" android:textsize="22sp"><radiogroup android:contentdescription="@string/ignore_quick_response" android:id="@+id/channelNumRG" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"><radiobutton android:id="@+id/channelRadioButton1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/zero" android:textsize="22sp"><radiobutton android:id="@+id/channelRadioButton2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/one" android:textsize="22sp"></radiobutton></radiobutton></radiogroup></textview></linearlayout><li><textview android:id="@+id/crcTextView" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/crc_check" android:textsize="22sp"><radiogroup android:contentdescription="@string/ignore_quick_response" android:id="@+id/crcCheckRG" android:layout_height="wrap_content" android:layout_width="wrap_content" android:orientation="horizontal"><radiobutton android:id="@+id/crcRadioButton1" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/zero" android:textsize="22sp"><radiobutton android:id="@+id/crcRadioButton2" android:layout_height="wrap_content" android:layout_width="wrap_content" android:text="@string/one" android:textsize="22sp"></radiobutton></radiobutton></radiogroup></textview></linearlayout><view android:background="#FF909090/" android:id="@+id/line" android:layout_height="2dip" android:layout_width="match_parent"><textview android:id="@+id/result" android:layout_height="wrap_content" android:layout_width="match_parent" android:text="@string/setResult" android:textsize="22sp/"><textview android:id="@+id/result1" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="22sp/"><textview android:id="@+id/result2" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="22sp/"><textview android:id="@+id/result3" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="22sp/"><textview android:id="@+id/result4" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="22sp/"><textview android:id="@+id/result5" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="22sp/"><textview android:id="@+id/result6" android:layout_height="wrap_content" android:layout_width="match_parent" android:textsize="22sp/"></textview></textview></textview></textview></textview></textview></textview></view></linearlayout>Java类文件:
package readAndWriteOBU;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.EditText;import android.widget.RadioButton;import android.widget.RadioGroup;import android.widget.Spinner;import android.widget.TextView;import com.hustxks.etcapp.R;public class InitActivity extends Activity{ //忽略快速响应帧单选框 private RadioGroup quickResponseRadioGroup; private RadioButton yesRadioButton; private RadioButton noRadioButton; //BST间隔下拉列表 private Spinner bstIntervalSpinner; //交易重试间隔下拉列表 private Spinner transIntervalSpinner; //功率级数编辑框 private EditText powerEditText; //信道号单选框 private RadioGroup channelNumRadioGroup; private RadioButton channelRadioButton1; private RadioButton channelRadioButton2; //CRC校验单选框 private RadioGroup crcCkeckRadioGroup; private RadioButton crcRadioButton1; private RadioButton crcRadioButton2; //是否忽略快速响应帧标志:00:忽略快速响应 01:完全透传 public static String ignoreQuickResFlag = 0; //BST间隔,单位ms,范围1~10ms public static String bstInterval = 10; //交易重试间隔,单位ms,范围1~10ms public static String transRetryInterval = 10; //功率级数,范围0~31 public static String power = 5; //信道号,取值0,1 public static String channelID = 0; //CRC校验标志位,取值0,1 public static String crcCheckFlag = 0; private String[] intervalTime; //显示设置结果文本框 TextView resultTextView1; TextView resultTextView2; TextView resultTextView3; TextView resultTextView4; TextView resultTextView5; TextView resultTextView6; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.init_activity); initView(); RadioGroupListener quickRadioGroupListener = new RadioGroupListener(quickResponseRadioGroup); RadioGroupListener channelRadioGroupListener = new RadioGroupListener(channelNumRadioGroup); RadioGroupListener crcRadioGroupListener = new RadioGroupListener(crcCkeckRadioGroup); EditTextListener editTextListener = new EditTextListener(); quickResponseRadioGroup.setOnCheckedChangeListener(quickRadioGroupListener); channelNumRadioGroup.setOnCheckedChangeListener(channelRadioGroupListener); crcCkeckRadioGroup.setOnCheckedChangeListener(crcRadioGroupListener); powerEditText.addTextChangedListener(editTextListener); intervalTime = getResources().getStringArray(R.array.intervalTime); ArrayAdapter<string>adapter = new ArrayAdapter<string>(this, android.R.layout.simple_spinner_item, intervalTime); bstIntervalSpinner.setAdapter(adapter); transIntervalSpinner.setAdapter(adapter); SpinnerListener bstSpinnerListener = new SpinnerListener(bstIntervalSpinner); bstIntervalSpinner.setOnItemSelectedListener(bstSpinnerListener); SpinnerListener retrySpinnerListener = new SpinnerListener(transIntervalSpinner); transIntervalSpinner.setOnItemSelectedListener(retrySpinnerListener); } private void initView() { quickResponseRadioGroup = (RadioGroup)findViewById(R.id.quickResponseRG); yesRadioButton = (RadioButton)findViewById(R.id.yesRadioButton); noRadioButton = (RadioButton)findViewById(R.id.noRadioButton); bstIntervalSpinner = (Spinner)findViewById(R.id.BSTintervalSpinner); transIntervalSpinner = (Spinner)findViewById(R.id.transRetrySpinner); powerEditText = (EditText)findViewById(R.id.powerEditText); channelNumRadioGroup = (RadioGroup)findViewById(R.id.channelNumRG); channelRadioButton1 = (RadioButton)findViewById(R.id.channelRadioButton1); channelRadioButton2 = (RadioButton)findViewById(R.id.channelRadioButton2); crcCkeckRadioGroup = (RadioGroup)findViewById(R.id.crcCheckRG); crcRadioButton1 = (RadioButton)findViewById(R.id.crcRadioButton1); crcRadioButton2 = (RadioButton)findViewById(R.id.crcRadioButton2); resultTextView1 = (TextView)findViewById(R.id.result1); resultTextView2 = (TextView)findViewById(R.id.result2); resultTextView3 = (TextView)findViewById(R.id.result3); resultTextView4 = (TextView)findViewById(R.id.result4); resultTextView5 = (TextView)findViewById(R.id.result5); resultTextView6 = (TextView)findViewById(R.id.result6); } //监听RadioGroup的类 class RadioGroupListener implements RadioGroup.OnCheckedChangeListener { private RadioGroup myRadioGroup; public RadioGroupListener(RadioGroup radioGroup) { // TODO Auto-generated constructor stub this.myRadioGroup = radioGroup; } @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub switch (myRadioGroup.getId()) { case R.id.quickResponseRG: if (checkedId == R.id.yesRadioButton) { ignoreQuickResFlag = 00; } else if (checkedId == R.id.noRadioButton) { ignoreQuickResFlag = 01; } resultTextView1.setText(ignoreQuickResFlag); break; case R.id.channelNumRG: if (checkedId == R.id.channelRadioButton1) { channelID = channelRadioButton1.getText().toString().trim(); } else if (checkedId == R.id.channelRadioButton2) { channelID = channelRadioButton2.getText().toString().trim(); } resultTextView5.setText(channelID);; break; case R.id.crcCheckRG: if (checkedId == R.id.crcRadioButton1) { crcCheckFlag = crcRadioButton1.getText().toString().trim(); } else if (checkedId == R.id.crcRadioButton2) { crcCheckFlag = crcRadioButton2.getText().toString().trim(); } resultTextView6.setText(crcCheckFlag); break; default: break; } } } //监听EditText的类 class EditTextListener implements TextWatcher { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { power = powerEditText.getText().toString().trim(); resultTextView4.setText(power); } } //监听Spinner的类 class SpinnerListener implements AdapterView.OnItemSelectedListener { private Spinner mySpinner; public SpinnerListener(Spinner spinner) { // TODO Auto-generated constructor stub this.mySpinner = spinner; } @Override public void onItemSelected(AdapterViewparent, View view, int position, long id) { if (mySpinner.getId() == R.id.BSTintervalSpinner) { bstInterval = intervalTime[position]; resultTextView2.setText(bstInterval); } else if (mySpinner.getId() == R.id.transRetrySpinner) { transRetryInterval = intervalTime[position]; resultTextView3.setText(transRetryInterval); } } @Override public void onNothingSelected(AdapterViewparent) { } }}</string></string>