Toast类用于显示字符串,在开发过程中测试时可以用来代替日志输出调试信息。
也常用于给用户简短提示,不需要用户确认,
例如:下载MP3完成后弹出一个Toast提示下载完成。
1、makeText(Contextr context, Charsequence message, int duration);
作用:创建一个Toast对象,该方法是Toast类的静态方法。
参数-duration:显示消息的持续时间,单位是毫秒。有两个预定义的常量值:
Toast.LENGTH_LONG:持续时间3~4秒;
Toast.LENGTH_SHORT:持续时间2~3秒;
【示例代码】Toast toast=Toast.make(this,”这是一个用于显示消息的字符串”,3000);
说明:创建一个toast对象。
提示:以上代码只是创建,还没有在窗口中显示信息。
2、show():
作用:显示Toast对象中的信息。
【示例代码-1】
toast.show();
说明:在窗口中显示以上创建的toast对象中第二个参数的字符串,持续时间是3000毫秒。
【示例代码-2】
Toast.make(this,”这是一个用于显示消息的字符串”,Toast.LENGTH_LONG).show();
说明:创建Toast对象并显示内容。
【示例代码-3】:显示xml文件中定义的字符串:
步骤1、在res/values/strings.xml中定义一个字符串值,如下代码中红框所示:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">Exer06_1-Toast示例</string>
<string name="toast2">这是资源中存放的字符串</string>
</resources>
步骤2、在MainActivity.onCreate()方法中,用如下代码调用并显示以上红框中的字符串:
Toast.makeText(this, getText(R.string.toast2),2000).show();
说明:调用Activity中的getText()方法,该方法负责将资源索引转换为字符串值。
Notification是Android中一个重要的系统服务 , Notification显示通知信息在手机状态栏,手机状态栏位于屏幕最上方,那里通常显示手机当前的网络状态、电池状态、时间、短信等。Notification代表的是一种具有全局效果的通知,Notification对象要通过NoitificationManager来发送。
Notification类用于存放通知标题、内容、图标以及发送的目标对象。
1、icon:通知的图标;
【示例代码】
Notification notif=new Notification();
notif.icon=R.drawable.icon;
说明:第一行创建通知对象,第二行设置通知对象的icon的图标,该图标用了Android默认的icon图标,也可以是其它图片。
2、tickerText:通知标题,该标题显示在窗口的状态栏中。
示例代码:notif.tickerText=”通知来啦”;
Notification对象可以如以上所示创建,再设置对象的图标、标题等属性,也可以按如下方法创建:
//创建通知对象,第一个参数是通知的图标,第二个参数是通知的标题,第三个参数是通知的时间
Notification notification=new Notification(
R.drawable.icon,"通知来啦!",System.currentTimeMillis());
setLatestEventInfo(mContext, "通知标题", "通知内容",pendIntent);
作用:设置点击通知的响应事件。
参数-mContext:当前Activity对象。
参数-通知标题:该标题不是上述的窗口状态栏的标题。
参数-通知内容:通知的详细内容。
参数-pendIntent稍后详述。
如图-1所示:
图-1
NotificationManager类是通知管理器对象,用于发送、取消通知。
1、notify(int id,Notification notif);
作用:发送一个通知。
参数-id:该通知的id值,用于区别其它通知。
参数-notif:已创建的通知对象。
【示例代码】notifManager.notify(100,notif);
说明:notifManager是一个已创建的NotificationManager对象,notif是一个已创建的Noification对象。
2、cancel(int);
作用:关闭指定索引值的通知。
示例代码:notifManager.cancel(100);
该类是Intent类的包装类,对intent进行再封装,封装后,可以多次发intent,并能使intent发送的目标组件在用户点击后再启动。
步骤1、创建Intent,示例代码如下:
Intent intent=new Intent(context,targetActivity.class);
步骤2、创建PendingIntent对象,并对intent进行包装,代码如下:
//创建pendIntent对象,用于封装intent并起到延迟使用通知的作用
PendingIntent pendIntent=PendingIntent.getActivity(
context, 0, intent, 0);
说明:
(1)当通知的目标是Activity时,用PendingIntent的静态方法getAcivity()创建PendingIntent对象;若通知的目标组件是Service则用getService()方法;若通知的目标组件是BroadcastReceiver,则用getBroadcast()方法。
参数-conext当前Activity对象。
参数-targetActivity.class:一个请求码,用0即可。
参数-intent:步骤1中定义的intent对象。
第四个参数设置为0即可。
步骤1、创建intent对象,发送的目标Activity是TargetActivity,代码如下:
Intent intent=new Intent(mContext,TaregetActivity.class);
步骤2、创建pendIntent对象,用于封装intent并起到延迟使用通知的作用
PendingIntent pintent=PendingIntent.getActivity(
mContext, 0, intent, 0);
步骤3、创建通知对象,第一个参数是通知的图标,第二个参数是通知的标题,第三个参数是通知的时间
Notification notification=new Notification(
R.drawable.icon,"通知来啦!",System.currentTimeMillis());
步骤4、设置点击通知的事件,第二个参数:通知标题,第三个参数:通知内容
notification.setLatestEventInfo(mContext, "通知标题", "通知内容",pintent);
步骤5、创建通知管理器对象
NotificationManager notifManager=(NotificationManager)
getSystemService(Context.NOTIFICATION_SERVICE);
步骤6、发送id值是100的通知
notifManager.notify(100, notification);
在手机中,菜单默认是隐藏的,通过按menu键显示菜单。对于系统中必要的,但又不是常用的功能(这些功能放在桌面上不太合适)一般放在菜单中。菜单创建有两种方式,一种是Java代码创建,一种是在xml文件中定义为资源,然后由Java代码解析。实际开发推荐使用第二种创建方式。
Android提供了如下接口用于实现菜单操作:
1、Menu,该接口是父接口,用于创建主菜单。
2、SubMenu接口继承了Menu接口,用于创建子菜单。
3、MenuItem接口:用于创建菜单项。
4、ContextMenu接口继承了Menu接口,用于创建上下文菜单。
说明:ContextMenu菜单将在以后介绍。
5、MenuInflater类:解析资源中定义的菜单。
Menu接口用来管理菜单。
1、MenuItem add(int titleRes);
作用:添加一个新的菜单项(其中titleRes是菜单项内容的资源id值)。
说明:菜单项的内容放在xml文件中,作为资源来调用。
2、MenuItem add(CharSequence title);
作用:添加一个新的菜单项。
说明:
(1)title:菜单项的内容,是一个CharSequence类型的字符串。
(2)1和2是方法名相同、参数类型不同的重载方法。
3、MenuItem add(int groupId,int itemId,int order,CharSequence title);
作用:添加一个新的菜单项。其中:
(1)groupId:组菜单的id值,菜单可以分组显示,groupId用于区分不同组的菜单。
(2)itemId:菜单项的id值,这个id值是菜单中唯一的值,不同组的菜单项的itemId也不能相同。
(3)order:菜单项显示的顺序,order值小的菜单项在菜单中靠上面显示。
4、MenuItem add(int groupId,int itemId,int order,int titleRes);
作用:添加一个新的菜单项。其中:titleRes是菜单项显示内容的资源id值。
说明:3和4是方法名相同、参数个数不同的重载方法。
5、SubMenu add(int titleRes);
作用:添加一个新的子菜单。
6、SubMenu add(CharSequence title);
作用:添加一个新的子菜单。
7、SubMenu addSubMenu(int groupId,int itemId,int order,int titleRes);
作用:添加一个新的子菜单。该子菜单位于groupId所在的组
说明:参数的意义与3、中的说明相同。
8、SubMenu addSubMenu(int groupId,int itemId,int order,CharSequence title):添加一个新的子菜单。
提供以下常用的菜单操作方法:
1、SubMenu setHeaderIcon(Drawable icon):设置菜单头的图标。
2、SubMenu setHeaderIcon(int iconRes):设置菜单头的图标。
3、SubMenu setHeaderTitle(int titleRest):设置菜单头的标题
4、SubMenu setHeaderTitle(CharSequence title):设置菜单头的标题。
5、SubMenu setHeaderView(View view):使用View类设置菜单头。
MenuInflater类用于解析菜单资源。
Void Inflate(resId);
作用:解析resId指定的菜单资源。
示例代码:
MenuInflater inflater= getMenuInflater();
Inflater.inflat(R.menu.options);
说明:稍后介绍菜单资源的制作。
重写Activity类中的onCreateOptionsMenu(Menu menu)方法,在该方法中调用menu对象添加子菜单、菜单项。
1、代码示例-创建简单的菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
menu.add(0,MENU_ITEM_UPDATE,0,"更新记录");
menu.add(0,MENU_ITEM_INSETRT,0,"插入记录");
menu.add(0,MENU_ITEM_DELETE,0,"删除记录");
menu.add(0,MENU_ITEM_QUERY,0,"查询记录");
return super.onCreateOptionsMenu(menu);
}
说明:代码中有四个常量,分别表示整数0-3,类的开始定义为如下代码所示:
public class MainActivity extends Activity {
static final int MENU_ITEM_UPDATE=0;
static final int MENU_ITEM_INSETRT=1;
static final int MENU_ITEM_DELETE=2;
static final int MENU_ITEM_QUERY=3;
2、代码示例-创建带子菜单的菜单:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
SubMenu smUpdate=menu.addSubMenu(0, MENU_ITEM_UPDATE, 0, "更新记录");
smUpdate.setIcon(R.drawable.update);
smUpdate.add("更新所有记录");
smUpdate.add("按姓名更新");
smUpdate.add("按成绩更新");
SubMenu smQuery=menu.addSubMenu(0,MENU_ITEM_QUERY,0,"查询记录");
smQuery.setIcon(R.drawable.query);
smQuery.add("查询所有记录");
smQuery.add("按姓名查询");
smQuery.add("按成绩查询");
return super.onCreateOptionsMenu(menu);
}
说明:以上代码中的两个常量,是(1)中的四个常量的其中两个。
步骤1、在资源中定义菜单
按以下步骤定义菜单资源:
(1) 在res文件夹下创建menu文件夹;
(2) 在menu文件夹下创建options.xml文件;
(3) options.xml代码如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/miUPdate"
android:title="更新记录"
android:icon="@drawable/update">
<!-- 子菜单 -->
<menu>
<item android:title="更新所有记录"/>
<item android:title="按姓名更新"/>
<item android:title="按成绩更新"/>
</menu>
</item>
<item android:id="@+id/miInsert"
android:title="插入记录"
android:icon="@drawable/insert"/>
<item android:id="@+id/miDelete"
android:title="删除记录"
android:icon="@drawable/delete"/>
<item android:id="@+id/miQuery"
android:title="查询记录"
android:icon="@drawable/query"/>
</menu>
步骤2、在onCreateOptionsMenu方法中编写解析菜单资源的代码,如下所示:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
//创建菜单资源解析对象
MenuInflater inflater=getMenuInflater();
//解析菜单资源
inflater.inflate(R.menu.options, menu);
return super.onCreateOptionsMenu(menu);
}
重写Activity类中的onOptionsItemSelected(MenuItem mi)方法,在该方法中编写菜单项被选择后的事件代码。
步骤1、代码解析菜单资源
(1)创建onOptionsItemSelected事件方法,操作方法:输入onOp再按Alt+/,按回车键。
(2)输入以下代码:
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()){
case R.id.miUPdate:
Toast.makeText(this, "选择了更新菜单", 5000).show();
break;
case R.id.miInsert:
Toast.makeText(this, "选择了插入菜单", 5000).show();
break;
case R.id.miDelete:
Toast.makeText(this, "选择了删除菜单", 5000).show();
break;
case R.id.miQuery:
Toast.makeText(this, "选择了查询菜单", 5000).show();
break;
}
return super.onOptionsItemSelected(item);
}
方式1、String StringValue(int);
方式2、String s=””+100;
android-sdk_r13-windows\platforms\android-10\data\res\drawable-hdpi
当Eclipse与模拟器断连,或者Devices视图中显示模拟器offline的问题。
解决方法:在命令行中执行
//结束adb进程,相当于windows任务管理器中结束了adb.exe。
adb kill-server
//启动adb进程,这样eclipse与模拟器重新连接
adb devices
若控制台中出现如下提示信息:
Installation error: INSTALL_FAILED_INSUFFICIENT_STORAGE
原因:ROM存储空间不足
解决方法:卸载掉部分应用程序,再安装。
解决办法:Toast创建后需要调用show()方法显示
系统菜单项的限制最多显示6个菜单项,如果超过6个,只显示5个,其余菜单项以列表的形式
显示,同时没有图片。