android:id="@+id/red"android:alphabeticShortcut="r"android:title="@string" />
当前位置:文档之家› Android教案

Android教案

Android教案
Android教案

第四章菜单和动作条

1.菜单分类:选项菜单(OptionsMenu)、上下文菜单(ContextMenu)、弹出菜单(PopupMenu)

2.菜单资源:使用XML格式定义菜单资源

android:id="@+id/group1"

android:checkableBehavior="single">

android:id="@+id/red"

android:alphabeticShortcut="r"

android:title="@string/red_title">

android:id="@+id/green"

android:alphabeticShortcut="g"

android:title="@string/green_title">

android:id="@+id/blue"

android:alphabeticShortcut="b"

android:title="@string/blue_title">

P90

3.实现选项菜单

1)修改选项菜单资源文件menu/main.xml

添加菜单子元素

android:id="@+id/font_10"

android:title="@string/font_10">

android:id="@+id/font_12"

android:title="@string/font_12">

android:id="@+id/font_14"

android:title="@string/font_14">

android:id="@+id/font_16"

android:title="@string/font_16">

android:id="@+id/font_18"

android:title="@string/font_18">

2)在Activity中加载定义好的菜单资源main.xml,实例化

publicboolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

returnsuper.onCreateOptionsMenu(menu);

}

3)响应菜单选项选择事件

@Override

publicboolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

item.setChecked(true);

switch (item.getItemId()) {

case R.id.item1:

item.setChecked(true);

tv.setTextColor(Color.RED);

break;

case R.id.item2:

item.setChecked(true);

tv.setTextColor(Color.GREEN);

break;

case R.id.item3:

item.setChecked(true);

tv.setTextColor(Color.BLUE);

break;

default:

break;

}

returnsuper.onOptionsItemSelected(item);

}

4)最终实现

/////////////////////////////////////////////////////////////////////

4.实现上下文菜单

1)创建上下文菜单XML文件contextmenu.xml

android:id="@+id/group1"

android:checkableBehavior="single">

android:id="@+id/red"

android:alphabeticShortcut="r"

android:title="@string/red_title">

android:id="@+id/green"

android:alphabeticShortcut="g"

android:title="@string/green_title">

android:id="@+id/blue"

android:alphabeticShortcut="b"

android:title="@string/blue_title">

2)为控件对象注册上下文菜单

publicclass MainActivity extends Activity {

private TextView tv;

@Override

protectedvoid onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(https://www.doczj.com/doc/495336527.html,yout.activity_main);

tv = (TextView) findViewById(R.id.text_title);

registerForContextMenu(tv);

注意:因为不是所有的控件都需要上下文菜单,所以只有通过registerForContextMenu(view);方法注册,才可以为该对象view创建对应的上下文菜单。

3)加载获取菜单资源

publicvoid onCreateContextMenu(ContextMenu menu, View v,

ContextMenuInfo menuInfo) {

// TODO Auto-generated method stub

super.onCreateContextMenu(menu, v, menuInfo);

getMenuInflater().inflate(R.menu.context, menu);

menu.setHeaderTitle("请选择背景颜色");

}

4)响应Item选择事件

@Override

publicboolean onContextItemSelected(MenuItem item) {

// TODO Auto-generated method stub

item.setChecked(true);

switch (item.getItemId()) {

case R.id.red:

item.setChecked(true);

tv.setBackgroundColor(Color.RED);

break;

case R.id.green:

item.setChecked(true);

tv.setBackgroundColor(Color.GREEN);

break;

case R.id.blue:

item.setChecked(true);

tv.setBackgroundColor(Color.BLUE);

break;

default:

break;

}

returntrue;

}

5)最终实现

///////////////////////////////////////////////////////////////////// 实现ContextMenu,一般要用到以下三个方法:

(1)registerForContextMenu(getExpandableListView());

(2)onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfomenuInfo);

(3)onContextItemSelected(MenuItem item);

>>ContextMenu和OptionsMenu相比主要有以下区别:

1,ContextMenu必须通过Activity的registerForContextMenu(View)来进行注册,而OptionsMenu不用。

2,ContextMenu不支持icon,而OptionsMenu支持。

3,ContextMenu可以有头,可以通过setHeaderIcon,setHeaderTitle,setHeaderView 来设置头,否则就没有头。

4,弹出的方式不一样。

5,Options Menu的拥有者是Activity,而上下文菜单的拥有者是Activity中的View。每个Activity有且只有一个Options Menu,它为整个Activity服务。而一个Activity往往有多个View,并不是每个View都有上下文菜单,这就需要我们调用

registerForContextMenu(View view)来指定。

////////////////////////////////////////////////////////////////

5.实现弹出菜单(类似上下文菜单)

1)创建弹出菜单XML文件popupmenu.xml

android:id="@+id/menu_red"

android:title="@string/red_title"android:checkable="true">

android:id="@+id/menu_green"

android:title="@string/green_title"android:checkable="true">

android:id="@+id/menu_blue"

android:title="@string/blue_title">

2)创建PopupMenu对象和显示弹出菜单

final Button btn=(Button)findViewById(R.id.new_button);

final PopupMenu popupMenu=new PopupMenu(this, btn);

popupMenu.inflate(R.menu.popupmenu);

btn.setOnClickListener(new View.OnClickListener() {

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

popupMenu.show();

}

});

3)菜单选项事件处理(只能通过popupMenu对象监听器实现)

popupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {

@Override

publicboolean onMenuItemClick(MenuItem arg0) {

// TODO Auto-generated method stub

switch (arg0.getItemId()) {

case R.id.menu_red:

btn.setTextColor(Color.RED);

break;

case R.id.menu_green:

btn.setTextColor(Color.GREEN);

break;

case R.id.menu_blue:

btn.setTextColor(Color.BLUE);

break;

default:

break;

}

returnfalse;

}

});

4)最终实现

/////////////////////////分隔线/2015.10.19///////////////////////////

6.动作条(ActionBar)

Android 3.0之后引入的新的对象,ActionBar可以说是一个方便快捷的导航神器。它可以作为活动的标题,突出活动的一些关键操作(如“搜索”、“创建”、“共享”等)、作为菜单的灵活使用,还可以实现类似TabWidget的标签功能以及下拉导航的功能,系统能够很好根据不同的屏幕配置来适应ActionBar的外观,配合起Fragemtn可谓是十分强大。

那么,对于今天的主角ActionBar怎么去添加?在Android3.0默认主题HloleFraphic(全息)主题中,已经创造了ActionBar,所以只要targetSdkVersion的值不低于11,创建的Activity 中默认都会带有ActionBar。例如:

本周包括以下内容:

1)显示与隐藏ActionBar

2)使用ActionBar显示OptionMenu的菜单项MenuItem

3〉使用程序图标导航

4)添加Action View

/////////////////////////////////////////////////////////////////////////////////////////

1)显示与隐藏ActionBar

方法一:修改AndroidManifest.xml

或者

android:theme="@android:style/Theme.NoTitleBar"/>

方法二:程序运行中修改

在运行时通过调用hide()隐藏Action Bar。自然也有show()。

ActionBar actionBar = getActionBar();

actionBar.hide();

//actionBar.show();

2)使用ActionBar显示OptionMenu的菜单项MenuItem

问题:有些手机没有Menu按钮,如何弹出OptionMenu?

解决步骤:

1.修改选项菜单文件main.xml

2.将选项菜单资源文件中的每个元素增加android:showAsAction="always"属性

3.在Activity类中添加和重写以下方法

publicboolean onCreateOptionsMenu(Menu menu) {

// TODO Auto-generated method stub

MenuInflaterinflater = new MenuInflater(this);

inflater.inflate(R.menu.main, menu);

returnsuper.onCreateOptionsMenu(menu);

}

@Override

publicboolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

switch (item.getItemId()) {

case android.R.id.home:

//创建启动MainActivity的Intent

Intent intent=new Intent(this,MainActivity.class);

//添加额外的Flag,将Activity栈中处于MainActivity之上的Activity弹出

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

break;

case R.id.item1:

Intent intent1=new Intent(this class);

startActivity(intent1);

break;

default:

break;

}

returnsuper.onOptionsItemSelected(item);

}

4.运行程序,看效果。

////////////////////////////////////////////////////////

3)使用程序图标导航

初始化前:

初始化后:

1.在protected void onCreate(Bundle savedInstanceState)方法中添加以下代码,对ActionBar初始化设置:

ActionBaractionBar = getActionBar();//获取ActionBar对象

actionBar.setDisplayShowHomeEnabled(true);//显示应用程序图标

actionBar.setDisplayHomeAsUpEnabled(true);//将应用程序图标转变为可点击图标,并添加一个返回箭头。

2.实现点击程序图标后返回到上一个页面(程序图标的ID默认为Android.R.id.home)

@Override

Publicboolean onOptionsItemSelected(MenuItem item) {

// TODO Auto-generated method stub

switch (item.getItemId()) {

case android.R.id.home:

//创建启动MainActivity的Intent

Intent intent=new Intent(this,MainActivity.class);

//添加额外的Flag,将Activity栈中处于MainActivity之上的Activity弹出

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

startActivity(intent);

break;

default:

break;

}

returnsuper.onOptionsItemSelected(item);

}

3.实现效果

///////////////////////////////////////////////////////////////////////////////

4)添加Action View

ActionBar除了可以显示普通的ActionItem之外,还可以显示普通的UI控件,如在ActionBar上显示一个时钟。

方法:定义Action Item时使用android:actionLayout="@layout/clock"属性指定ActionView对应的视图布局资源。

步骤:

1.在layout文件夹中新建一个显示时钟的布局文件clock.xml

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:id="@+id/analogClock1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

2.在菜单资源文件main.xml中添加Action Item

android:id="@+id/item3"

android:actionLayout="@layout/clock"

android:showAsAction="always"

android:title="时钟">

3.查看效果

//////////////////////////////分割线2015.10.25//////////////////////////////

第5章发送和接收信息

主要内容:

一、Intent的基本作用

二、Activity之间的跳转

三、使用Intent在Activity之间传递数据的基本方法

回顾:

二、Activity之间跳转

Intent intent=new Intent();

intent.setClass(MainActivity.this, CheckActivity.class);

startActivity(intent);

MainActivity.this.finish();

或者:

Intent intent1=new Intent(this,help.class);

startActivity(intent1);

还可以:

startActivity(new Intent(this,help.class));

1.Intent的基本作用

Intent的介绍

Intent的中文意思是“意图,意向”,在Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用

程序之间,也可用于应用程序内部的Activity/Service之间的交互。因此,可以将Intent理解为不同组

件之间通信的“媒介”专门提供组件互相调用的相关信息。

Intent的属性

Intent有以下几个属性:

1.组件(Component)

2.动作(Action)

3.数据(Data)

4.分类(Category)

5.额外信息(Extras)

6.标记(Flags)

其中最常用的是Action属性和Data属性。

2.动作(ACTION)

1)Intent的Action属性

2)测试ACTION_GET_CONTENT获得内容

获取通讯录的内容

步骤:1.布局文件添加按钮控件

2.Activity类中为按钮添加监听

btn.setOnClickListener(new OnClickListener() {

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

Intent intent=new Intent();

intent.setAction(intent.ACTION_GET_CONTENT);

intent.setType("vnd.android.cursor.item/phone");// 设置Intent Type 属性

//主要是获取通讯录的内容

startActivity(intent);

}

});

}

3)Intent的Data属性

Intent的Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定。比如:ACTION_EDIT Action应该和要编辑的文档URI Data匹配,ACTION_VIEW应用应该和要显示的URI匹配。

4)Intent的Category属性

intent.setAction(Intent.ACTION_MAIN);// 添加Action属性

intent.addCategory(Intent.CATEGORY_HOME);// 添加Category属性

startActivity(intent);// 启动Activity

5)Intent的Extra属性

Intent的Extra属性是添加一些组件的附加信息。比如,如果我们要通过一个Activity来发送一个Email,

就可以通过Extra属性来添加subject和body。

下面的例子在第一个Activity的EditText输入用户名,该年龄保存在Intent的Extras属性中。当单击

Button时,会在第二个Activity中显示用户名。

步骤:

(1)添加一个类SecondActivity.java和相应的布局文件second_layout.xml

(2)对MainActivity中的按钮Button3添加监听

btn2.setOnClickListener(new OnClickListener() {

@Override

publicvoid onClick(View arg0) {

// TODO Auto-generated method stub

Intent intent = new Intent();

//设置Intent的class属性,跳转到SecondActivity

intent.setClass(MainActivity.this, SecondActivity.class);

//为intent添加额外的信息

intent.putExtra("useName", et1.getText().toString());

//启动Activity

startActivity(intent);

}

});

(3)在SecondActivity.java中完善代码

//设置当前的Activity的界面布局

setContentView(https://www.doczj.com/doc/495336527.html,yout.second_layout);

//获得Intent

Intent intent = this.getIntent();

tv1 = (TextView)findViewById(R.id.textView1);

//从Intent获得额外信息,设置为TextView的文本

tv1.setText("你的名字是:"+intent.getStringExtra("useName"));

(4)在AndroidManifest中注册SecondActivity.java

(5)运行看效果

二、通过Intent启动系统应用(P142)

////////////////////////////////2015.11.1分隔线

////////////////////////////// 回顾:

例子:在第一个Activity 的EditText 输入用户名,该年龄保存在Intent 的Extras 属性中。当单击Button 时,会在第二个Activity 中显示用户名。

图表1第2个Activity 图表2第一个Activity

实现过程:

相关主题
文本预览
相关文档 最新文档