当前位置:首页 > ActionBar笔记
第14章 ActionBar 第12章Fragment 本章内容:(操作栏、Fragment、操作栏和Fragment实现Tab导航栏)
? 操作栏(ActionBar)和Fragment是Android 3.0新引入的界面控件,一定程度上是为了适应Android平板电脑等
大屏幕设备界面设计需要而产生的
? 主要目的有两个,一是使用动作栏制作导航条,即将起导航作用的Tab选项卡放在动作栏中,方便程序在各个
模块之间进行切换,二是将选项菜单的菜单项放置在动作栏中,方便用户使用选项菜单中的菜单项。
? 当Activity对象开启使用动作栏后,动作栏将出现在Activity对象视图区的上方,动作栏有图标和标题,如果不
特意设置它们的话,动作栏的图标/标题与应用程序的图标/标题相同。动作栏中可以放置Tab选项卡或选项菜单的菜单项。
? 在Android 4.0系统中得到了进一步的发展,可以良好的支持不同屏幕尺寸的设备,并可以根据屏幕大小的不同
改变显示内容
一、操作栏
? 操作栏(Action Bar)代替传统的“标题栏”和“选项菜单”功能 ? 操作栏左侧的图标是应用程序的图标(Logo),图标旁边是应用程序当前Activity的标题,右侧的多个图标则是“选
项菜单”中的菜单项
? 可以提供多个实用的功能:
(1)将“选项菜单”的菜单项显示在操作栏的右侧; (2)基于Fragment实现类似于Tab页的导航切换功能; (3)为导航提供可“拖拽—放置”的下拉列表; (4)可在操作栏上实现类似于“搜索框”的功能。 ? 操作栏的实际显示效果,取决于屏幕分辨率和屏幕方向
? 在AndroidManifest.xml配置文件的
\,表示开启该Activity对象的动作栏。(有的书和视频说默认不能使用动作栏,但我感觉安卓4.0默认可以使用动作栏,若要隐藏操作栏,方法一为在AndroidManifest.xml中设置 控制该行为的主菜单项属性是android:showAsAction,如:android:showAsAction=\这个属性可接受的值有: (1)always:这个值会使菜单项一直显示在Action Bar上。 (2)ifRoom:如果有足够的空间,这个值会使菜单项显示在Action Bar上。 (3)never:这个值使菜单项永远都不出现在Action Bar上。 (4)withText:这个值使菜单项和它的图标,菜单文本一起显示。 【例】res——menu——mymenu中完整代码如下:
2、添加代码,如下:
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main);
ActionBar actionBar = getActionBar(); //获得动作栏 //
actionBar.hide();// 隐藏动作栏
//actionBar.setDisplayShowTitleEnabled(false);//隐藏标题
// actionBar.setDisplayShowHomeEnabled(false); //隐藏左上角图标
}
@Override
public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_menu, menu);//解析xml菜单 return true;
} @Override
public boolean onOptionsItemSelected(MenuItem item){ TextView label = (TextView)findViewById(R.id.label); switch(item.getItemId()) {
case R.id.main_menu_0:
label.setText(\打印,菜单ID:\ + item.getItemId()); return true;
case R.id.main_menu_1:
label.setText(\新建,菜单ID:\ + item.getItemId()); return true;
case R.id.main_menu_2:
label.setText(\邮件,菜单ID:\ + item.getItemId()); return true;
case R.id.main_menu_3:
label.setText(\设置,菜单ID:\ + item.getItemId()); return true;
case R.id.main_menu_4:
label.setText(\订阅,菜单ID:\ + item.getItemId()); return true; }
2
}
return false;
}
【注】在AndroidManifest.xml里的Activity加上属性android:uiOptions=\后,普通ActionBar将不再显示在标题栏部分,而是显示在屏幕底部。
3、显示菜单项时采用自定义布局
(1)在item标签中添加android:actionLayout属性,并将属性值定义为需要显示的布局文件
android:showAsAction=\ android:actionLayout=\/> 注:代码第5行表示显示该菜单项时,采用/layout/printview.xml文件作为自定义布局 (2)printview.xml文件的完整代码如下: android:layout_width=\ android:layout_height=\ android:src=\ android:layout_width=\ android:layout_height=\ android:hint=\输入需要打印的文件名称\ android:ems=\ 注:android:ems = \设置TextView或者Edittext的宽度为12个字符的宽度。当设置该属性后,控件显示的长度就为12个字符的长度,超出的部分将不显示。 4、向动作栏增加Tab选项卡 1)获得动作栏 Activity对象可以使用getActionBar()得到系统提供的ActionBar对象,即得到动作栏,得到动作栏之后,动作栏默认可见,如果想隐藏动作栏,可以让动作栏调用hide()方法,想再显示动作栏可以让动作栏调用show()方法。 动作栏主要用于放置Tab选项卡,因此,获得动作栏之后,需要将动作栏的模式设置成NAVIGATION_MODE_TABS模式,如下所示: ActionBar actionBar = getActionBar();//获得动作栏 actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); // 设置动作栏导航模式 2)获得Tab选项卡 ActionBar.Tab类的实例称为Tab选项卡。动作栏调用newTab()方法可以返回一个Tab选项卡:ActionBar.Tab tab = actionBar.newTab(); 要求newTab()方法返回的Tab选项卡必须注册有TabListener监视器,即要求Tab选项卡能对用户选择它作出某种响应。 3)向动作栏添加Tab选项卡 动作栏可以调用addTab(ActionBar.Tab tab)方法添加参数指定的Tab选项卡,例如actionBar.addTab(tab); 注: 如果动作栏添加了一个没有注册TabListener监视器的Tab选项卡,那么项目可以通过编译(debug),但会发生运行异常,系统将终止程序的运行。 5、Tab选项卡注册监视器的方法 Tab选项卡注册监视器的方法是 3 setTabListener(ActionBar.TabListener listener) ActionBar.TabListener接口中有如下三个方法: ● public void onTabSelected (ActionBar.Tab tab, FragmentTransaction ft) 用户将未选中的Tab选项卡变为选中状态时,监视器调用该方法,参数tab是当前用户操作的Tab选项卡。 ●public void onTabReselected (ActionBar.Tab tab, FragmentTransaction ft) 用户释放选中的Tab选项卡时,监视器调用该方法,参数tab是当前用户操作的Tab选项卡。 ●public void onTabUnselected (ActionBar.Tab tab, FragmentTransaction ft) 用户将选中的Tab选项卡变为未选中状态时,监视器调用该方法,参数tab是当前用户操作的Tab选项卡。 6、ActionBar的常用方法 void addTab(ActionBar.Tab tab, boolean setSelected):添加Tab选项卡,并指定状态。 ● void addTab(ActionBar.Tab tab, int position) :添加Tab选项卡,并指定位置,位置索引从0开始。 int getTabCount():返回其中的Tab选项卡的数目。 ● void setIcon(int resId)与void setIcon(Drawable icon):设置动作栏的图标。 ● void setTitle(int resId) 与void setTitle(CharSequence title):设置动作栏的标题。 ● void setDisplayShowTitleEnabled(boolean showTitle) :设置是否显示动作栏的标题 ● void setDisplayShowHomeEnabled(boolean showHome) :设置是否显示动作栏的图标。当取值false时,动作栏将出现在最顶端 7、Tab的常用方法 ● ActionBar.Tab setIcon(Drawable icon)与 setIcon(int resId) :设置选项卡上的图标。 ● ActionBar.Tab setTabListener(ActionBar.TabListener listener) :为选项卡注册监视器。 ● ActionBar.Tab setTag(Object obj) :为选项卡设置一个备用对象。 ● ActionBar.Tab setText(int resId)与setText(CharSequence text) :设置选项卡上的文本。 8、菜单项与Tab选项卡的位置关系 动作栏自动分成互不干扰的两行,第一行用于放置选项菜单的菜单项,第二行放置Tab选项卡。 需要注意是,当动作栏中放置了选项菜单的菜单项后,程序将不再显示动作栏的标题,只显示动作栏的图标,而且如果向动作栏放置了较多的菜单项后,使得菜单项的宽度之和超出了Activity对象的视图的宽度,动作栏的第一行不会自动水平滚动,用户将无法看到全部的菜单项。 二、Fragment 1.简介 ? 用途是在大屏幕设备上实现灵活、动态的界面设计 ? 可以被设计成为可重用模块的,因为每个Fragment都有自己的布局和生命周期回调函数,可以将同一个 Fragment放置到多个不同的Activity中 ? 为了重复使用Fragment,应该避免直接从一个Fragment去操纵另一个Fragment,这样会增加两个Fragment之 间的耦合度,不利于模块的重用 2.Fragment生命周期 Fragment具有与Activity类似的生命周期,但比Activity支持更多的事件回调函数 4
共分享92篇相关文档