[转载]Android开发教程 — 葵花宝典第四层 控件之 Toast Spinner RadioButton – Jason_CC – 博客园.
Hi 大家好!
今天继续我们的控件学习,今天主要学习3种控件
1 Toast — 提示信息 (这种提示是不能获取到焦点,并且会在一定时间内消失,类似与Windows软件中的气泡消息)
2 Spinner — 下拉菜单 (这个就不用解释了吧。。)
3 RadioButton — 单选按钮 (同上)
那么,课程开始之前,同样是先上笑话。。
诊所门前坐着3个小孩——大男孩、小男孩、女孩。 护士问:小朋友,哪儿不舒服? 大男孩:我吞下了一个玻璃球。 护士问另一个:你呢?
女孩:那玻璃球是我的。 护士又问:哪你呢? 小男孩:接下来是我玩! 🙂
首先是Toast,先来看看运行起来默认的效果,如下图
这种效果还是比较常用的,其实Toast有5种不同的实现效果,本人觉得有3种比较常用,在这里我主要讲3种不同类型的Toast,分别是 默认效果、自定义位置效果、带图片效果。贴上代码,代码中都有详细注释:
[Java]
package TSD.Jason.Example;
import Android.app.Activity;
import Android.os.Bundle;
import android.view.Gravity;
import android.view.MotionEvent;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.Toast;
public class ToastActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toast);
}
/* 屏幕触点事件
*该方法并不只处理一种事件,一般情况下以下三种情况的事件全部由onTouchEvent方法处理,
*只是三种情况中的动作值不同。
*
*屏幕被按下:当屏幕被按下时,会自动调用该方法来处理事件,此时MotionEvent.getAction()
*的值为MotionEvent.ACTION_DOWN,如果在应用程序中需要处理屏幕被按下的事件,
*只需重新该回调方法,然后在方法中进行动作的判断即可。
*
*屏幕被抬起:当触控笔离开屏幕时触发的事件,该事件同样需要onTouchEvent方法来捕捉,然后在方法中进行动作判断。
*当MotionEvent.getAction()的值为MotionEvent.ACTION_UP时,表示是屏幕被抬起的事件。
*
*在屏幕中拖动:该方法还负责处理触控笔在屏幕上滑动的事件,同样是调用MotionEvent.getAction()
*方法来判断动作值是否为MotionEvent.ACTION_MOVE再进行处理。
*
*
*
* event.getAction() //获取触控动作比如ACTION_DOWN
* event.getPointerCount(); //获取触控点的数量,比如2则可能是两个手指同时按压屏幕
event.getPointerId(nID); //对于每个触控的点的细节,我们可以通过一个循环执行getPointerId方法获取索引
event.getX(nID); //获取第nID个触控点的x位置
event.getY(nID); //获取第nID个点触控的y位置
event.getPressure(nID); //LCD可以感应出用户的手指压力,当然具体的级别由驱动和物理硬件决定的
event.getDownTime() //按下开始时间
event.getEventTime() // 事件结束时间
event.getEventTime()-event.getDownTime()); //总共按下时花费时间
Toast.LENGTH_SHORT 较短时间
Toast.LENGTH_LONG 较长时间
*
* */
@Override
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
System.out.println(“用户按下”);
break;
case MotionEvent.ACTION_UP:
System.out.println(“用户抬起”);
break;
case MotionEvent.ACTION_MOVE:
System.out.println(“用户移动”);
break;
}
Toast.makeText(this,”Toast 的使用方式:点击的X轴为:”+ event.getX() + ” 点击的Y轴为:” + event.getY(),
Toast.LENGTH_SHORT).show();
return true;
}
/**
* 自定义Toast显示位置
*/
private void ShowToast()
{
Toast toast = Toast.makeText(this,”Toast自定义的显示位置”,Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
/**
* 自定义带图片的Toast
*/
private void ShowImgToast()
{
Toast toast = Toast.makeText(getApplicationContext(),
“带图片的Toast”, Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) toast.getView();
ImageView imageCodeProject = new ImageView(getApplicationContext());
imageCodeProject.setImageResource(R.drawable.icon);
toastView.addView(imageCodeProject, 0);
toast.show();
}
}
[/java]
自定义位置效果运行如下图:
toast.setGravity(Gravity.CENTER, 0, 0); setGravity方法中
第一个参数是将Toast显示在什么方位,这里是居住
第二个参数 设置X轴的偏移量
第三个参数 设置Y轴的偏移量
大家可以动手修改下参数,然后运行看看效果。
带图片的Toast,运行效果如下图
我们代码中用到了一个事件,叫做 onTouchEvent() ,这个事件主要是用来捕获用户触摸屏幕的操作
这些标注出来的地方我在代码中已经详细注释了,希望大家认真思考,弄明白。
Spinner
下拉控件在Web页面中使用的频率大家有目共睹,是一个非常重要的控件。那么在Android中,它张什么样子呢?如下图
代码及注释如下:
package TSD.Jason.Example; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.Toast; public class SpinnerActivity extends Activity { private static final String[] m_types = {"A型","B型","AB型","0型","其他"}; private Spinner m_Spinner; private ArrayAdapteradapter; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.spinner); m_Spinner = (Spinner)this.findViewById(R.id.spinner1); //将可选内容与ArrayAdapter连接 //第二个参数表示spinner没有展开前的UI类型 adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, m_types); //设置下拉列表风格 第1种 simple_spinner_dropdown_item 第2种 simple_spinner_item adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); m_Spinner.setAdapter(adapter); //设置下拉列表选中项监听事件 m_Spinner.setOnItemSelectedListener(new Spinner.OnItemSelectedListener() { /* * 第一个参数 是适配器 <!--?-->是适配器里内容的类型,可把?改成你存的类型。 * 第二个参数 是你当前选择的view * 第三个参数 是你所选项在适配器中的索引位置 * 第四个参数 选定项目的行数 */ @Override public void onItemSelected(AdapterView<!--?--> arg0, View arg1, int arg2, long arg3) { // TODO Auto-generated method stub System.out.println(arg2); System.out.println(arg3); Toast.makeText(getApplicationContext(), "你选中的是" +m_types[arg2], Toast.LENGTH_SHORT).show(); } //没选中或什么都不选时调用 @Override public void onNothingSelected(AdapterView<!--?--> arg0) { // TODO Auto-generated method stub } }); } }
下拉菜单控件还是比较简单的,这里就不在过多介绍了
RadioButton
单选按钮大家应该不陌生吧,它在Android中是什么样呢?其实刚才在下拉菜单中大家已经看到了它的样子,上图
先看看布局文件中是如何定义的:
<!--?xml version="1.0" encoding="utf-8"?-->
大家注意到了吗?在RadioButton外边还嵌套了一层RadioGroup?
大家回忆一下在HTML中我们如何定义一组单选按钮呢? 是不是要通过一个叫做name的属性。将name设置为同一个名字,那么这些相同name的就在一个组中了,从而实现单选按钮效果,那么这个RadioGroup其实也类似与name属性,将一些单选按钮包裹成一组。
package TSD.Jason.Example; import android.app.Activity; import android.os.Bundle; import android.view.Gravity; import android.widget.RadioButton; import android.widget.RadioGroup; import android.widget.Toast; public class radiobuttonActivity extends Activity { RadioGroup m_RadioGroup; RadioButton m_Radio1, m_Radio2, m_Radio3, m_Radio4; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.radiobutton); m_RadioGroup = (RadioGroup) findViewById(R.id.radioGroup1); m_Radio1 = (RadioButton) findViewById(R.id.radio0); m_Radio2 = (RadioButton) findViewById(R.id.radio1); m_Radio3 = (RadioButton) findViewById(R.id.radio2); m_Radio4 = (RadioButton) findViewById(R.id.radio3); /* 设置事件监听 */ m_RadioGroup .setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { @Override public void onCheckedChanged(RadioGroup group, int checkedId) { // TODO Auto-generated method stub if (checkedId == m_Radio2.getId()) { DisplayToast("正确答案:" + m_Radio2.getText() + ",恭喜你,回答正确!"); } else { DisplayToast("请注意,回答错误!"); } } }); } /* 显示Toast */ public void DisplayToast(String str) { Toast toast = Toast.makeText(this, str, Toast.LENGTH_LONG); // 设置toast显示的位置 toast.setGravity(Gravity.TOP, 0, 220); // 显示该Toast toast.show(); } }
今天就先讲到这里,希望大家动手去练习,熟练使用它们。
源码已经上传到天圣达网站,大家可以去下载 http://www.bj-stl.com/android.html