您的位置:首页 > 移动开发 > Android开发

android中RadioGroup、RadioButton、Spinner、EditText用法详解(含示例截图和源代码)

2015-01-28 21:40 591 查看
为了保护版权、尊重原创,转载请注明出处:/article/8201823.html,谢谢!

今天在项目中用到了android中常用的RadioGroup、RadioButton、Spinner、EditText等控件,在此介绍一下它们的用法,希望对需要的朋友有帮助。

一、RadioGroup和RadioButton的使用

RadioButton就是我们常见的单选按钮,一个RadioGroup可以包含多个单选按钮,但是每次只能选择其中的一个值。

我们先看一下布局文件:

<span style="font-size:18px;"><RadioGroup
android:id="@+id/quickResponseRG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/ignore_quick_response"
android:orientation="horizontal" >

<RadioButton
android:id="@+id/yesRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ignore_yes"
android:textSize="22sp" />

<RadioButton
android:id="@+id/noRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ignore_no"
android:textSize="22sp" />
</RadioGroup></span>
再来看一下RadioGroup的监听器接口:RadioGroup.OnCheckedChangeListener

public interface OnCheckedChangeListener {
/**
* <p>Called when the checked radio button has changed. When the
* selection is cleared, checkedId is -1.</p>
*
* @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);
设置监听器接口:AdapterView.OnItemSelectedListener

public interface OnItemSelectedListener {
/**
* <p>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.</p>
*
* 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(AdapterView<?> parent, 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(AdapterView<?> parent);
}
我们需要实现AdapterView.OnItemSelectedListener接口,重写onItemSelected(AdapterView<?> parent, 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,由于程序中设置了监听器,所以上面选项设置的值都会在分割线下面实时显示出结果。

源代码:

布局文件:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/ignoreTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ignore_quick_response"
android:textSize="22sp" />

<RadioGroup
android:id="@+id/quickResponseRG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/ignore_quick_response"
android:orientation="horizontal" >

<RadioButton
android:id="@+id/yesRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ignore_yes"
android:textSize="22sp" />

<RadioButton
android:id="@+id/noRadioButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/ignore_no"
android:textSize="22sp" />
</RadioGroup>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/BSTintervalTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/BST_interval"
android:textSize="22sp" />

<Spinner
android:id="@+id/BSTintervalSpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/trans_retry"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/trans_retry_interval"
android:textSize="22sp" />

<Spinner
android:id="@+id/transRetrySpinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/powerTV"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/power"
android:textSize="22sp" />

<EditText
android:id="@+id/powerEditText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="text"
android:text="@string/default_power"
android:textSize="22sp" />

<TextView
android:id="@+id/powerRangeTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/power_range"
android:textSize="22sp" />
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/channelTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/channel_num"
android:textSize="22sp" />

<RadioGroup
android:id="@+id/channelNumRG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/ignore_quick_response"
android:orientation="horizontal" >

<RadioButton
android:id="@+id/channelRadioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zero"
android:textSize="22sp" />

<RadioButton
android:id="@+id/channelRadioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/one"
android:textSize="22sp" />
</RadioGroup>
</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >

<TextView
android:id="@+id/crcTextView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/crc_check"
android:textSize="22sp" />

<RadioGroup
android:id="@+id/crcCheckRG"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:contentDescription="@string/ignore_quick_response"
android:orientation="horizontal" >

<RadioButton
android:id="@+id/crcRadioButton1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/zero"
android:textSize="22sp" />

<RadioButton
android:id="@+id/crcRadioButton2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/one"
android:textSize="22sp" />
</RadioGroup>
</LinearLayout>

<View
android:id="@+id/line"
android:layout_width="match_parent"
android:layout_height="2dip"
android:background="#FF909090"/>

<TextView
android:id="@+id/result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/setResult"
android:textSize="22sp"/>

<TextView
android:id="@+id/result1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"/>

<TextView
android:id="@+id/result2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"/>

<TextView
android:id="@+id/result3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"/>

<TextView
android:id="@+id/result4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"/>

<TextView
android:id="@+id/result5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"/>

<TextView
android:id="@+id/result6"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="22sp"/>

</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(AdapterView<?> parent, 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(AdapterView<?> parent) {

}
}
}
到此结束,转载请注明出处,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: