[转载]Android开发教程 --- 葵花宝典第四层 控件之 Toast Spinner RadioButton

[转载]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

赞(0) 打赏
分享到: 更多 (0)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏