Android UI开发详解之ActionBarWord下载.docx
《Android UI开发详解之ActionBarWord下载.docx》由会员分享,可在线阅读,更多相关《Android UI开发详解之ActionBarWord下载.docx(29页珍藏版)》请在冰豆网上搜索。
三、添加ActionBar的Item
1、通过程序动态布局
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
packagecom.xys.actionbar;
importandroid.os.Bundle;
importandroid.app.ActionBar;
importandroid.app.Activity;
importandroid.view.Menu;
importandroid.view.MenuItem;
publicclassMainActivity
extendsActivity{
ActionBaractionBar;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
actionBar=getActionBar();
actionBar.show();
}
publicbooleanonCreateOptionsMenu(Menumenu){
//Inflatethemenu;
thisaddsitemstotheactionbarifitispresent.
super.onCreateOptionsMenu(menu);
//添加菜单项
MenuItemadd=menu.add(0,0,0,"
add"
);
MenuItemdel=menu.add(0,0,0,"
del"
MenuItemsave=menu.add(0,0,0,"
save"
//绑定到ActionBar
add.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
del.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
save.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
returntrue;
效果如图:
2、通过Menu.xml文件布局
menu/menu.xml
xmlversion="
1.0"
encoding="
utf-8"
menuxmlns:
android="
>
item
android:
id="
@+id/item1"
orderInCategory="
1"
showAsAction="
ifRoom|withText"
title="
@string/save"
/>
2"
@string/edit"
/menu>
程序:
publicclassActionBarXMLActivity
/**Calledwhentheactivityisfirstcreated.*/
publicvoidonCreate(BundlesavedInstanceState){
setContentView(R.layout.main);
publicbooleanonCreateOptionsMenu(Menumenu)
{
MenuInflaterinflater=getMenuInflater();
inflater.inflate(R.menu.optionsmenu,menu);
效果和上面一样
四、关于菜单项过多
当菜单项过多时,Android会分两种情况进行处理:
1、手机有MENU实体键:
则按下Menu键后会显示剩余菜单项
2、手机没有MENU实体键:
则会在最左边显示一个ActionOverFlow按钮,按下后会显示剩余项菜单,如图:
五、使用带字的ActionItem
1、Actionitem默认格式是如果菜单项含字和图标的话,只显示图标
2、如果想要显示字的效果,在xml里如下设置:
或者在代码里调用setShowAsAction():
setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM)
六、ActionBar的单击事件
1、ActionBar中一个菜单项(即Actionitem)的触发像以前版本中的活动菜单回调方法(onOptionsItemSelected())一样。
2、当用户选择一个Fragment的菜单项时,首先会调用Activity的onOptionsItemSelected()方法,如果该方法返回false,则调用Fragment实现的onOptionsItemSelected()方
法。
publicbooleanonOptionsItemSelected(MenuItemitem){
//TODOAuto-generatedmethodstub
switch(item.getItemId()){
caseR.id.menu_save:
Toast.makeText(getApplicationContext(),
"
menu_save"
0).show();
break;
caseandroid.R.id.home:
Intentintent=
newIntent(this,MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP
|Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
android.R.id.home"
0)
.show();
default:
returnsuper.onOptionsItemSelected(item);
七、应用的图标
1、默认情况下,应用图标在ActionBar的左侧
2、当用户点击应用bar的时候,系统会调用你的Activity里面的onOptionsItemSelected()方法里面的Android.R.id.HomeID(你的主ID)里定义的事件。
我们可以重写这个方法,添加一个条件执行该行为:
让它跳转到这个应用的主Activity而不是返回的主屏幕。
3、如果选择返回应用的主activity,最好的方式是在创建的Intent中添加FLAG_ACTIVITY_CLEAR_TOP这个标签。
使用这个FLAG_ACTIVITY_CLEAR_TOP标签,如果应用的主Activity已经在activity栈中存在,所有在其上的activity都会被销毁,然后主activity会到栈顶,而不用创建主Activity的的新实例。
publicbooleanonOptionsItemSelected(MenuItemitem)
switch(item.getItemId())
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
当我们想实现用户点击ActionBar图标后返回前一个activity,可以通过在Actionbar设置setDisplayHomeAsUpEnabled(true)来实现。
如图:
八、添加活动视图
1、ActionBar中还可以添加很多其他的视图
我们也可以添加一个视图作为一个ActionItem.我们可以通过在xml元素的android:
actionLayout属性制定我们希望现实布局资源的ID(例如@layout/mysearchview)
我们可以选择添加android:
actionViewClass属性分配与完全限定的类名描述我们想要显示的视图(例如android.widget.SearchView)
importandroid.view.MenuInflater;
protectedvoidonStart(){
super.onStart();
ActionBaractionBar=
this.getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
inflater.inflate(R.menu.main,menu);
这样我们就添加了一个Search的视图,效果如下:
2、其他Item
ActionBar的Item会分有好几个种类,分别有
1).普通类型(带图片带文字)。
2).分享类型。
3).可拓展类型。
4).列表类型。
@+id/menu_collapse"
actionLayout="
@layout/collapsibleview"
icon="
@drawable/search"
ifRoom|collapseActionView"
@string/menu_search"
/item>
@+id/menu_share"
actionProviderClass="
android.widget.ShareActionProvider"
enabled="
true"
ifRoom"
@string/menu_share"
@+id/menu_settings"
@drawable/save"
100"
@string/menu_settings"
@+id/menu_save"
@string/menu_save"
menu>
@+id/action_sort_size"
drawable/ic_menu_sort_by_size"
onClick="
onSort"
@+id/action_sort_alpha"
drawable/ic_menu_sort_alphabetically"
menu_saveItem就是一个最普通的带文字带图片的Item。
能否显示在ActionBar的Item主要看android:
这个属性。
看menu_sitting就永远不会显示出来,只有在按menu时候会显示。
谷歌文档中提供android:
showAsAction总共有五个属性。
never:
永远不会显示。
只会在溢出列表中显示。
ifRoom:
会显示在Item中,但是如果已经有4个或者4个以上的Item时会隐藏在溢出列表中。
always:
无论是否溢出,总会显示。
withText:
Title会显示。
collapseActionView:
可拓展的Item。
3、可分享的Item
看上面代码片段menu_share按钮就是一个可分享的Item。
表示这个Item是个分享Item
在java代码中进行实现:
//添加分享按钮的事件
//4.0以下没有ShareActionProvider
MenuItemmenuItem_share=menu.findItem(R.id.menu_share);
//Gettheproviderandholdontoittoset/changetheshareintent.
mShareActionProvider=(ShareActionProvider)menuItem_share
.getActionProvider();
//IfyouusemorethanoneShareActionProvider,eachforadifferent
//action,
//usethefollowinglinetospecifyauniquehistoryfileforeachone.
//mShareActionProvider.setShareHistoryFileName("
custom_share_history.xml"
//Setthedefaultshareintent
mShareActionProvider.setShareIntent(getDefaultShareIntent());
privateIntentgetDefaultShareIntent(){
Log.i(TAG,
getDefaultShareIntent"
newIntent(Intent.ACTION_SEND);
intent.setType("
text/plain"
intent.putExtra(Intent.EXTRA_SUBJECT,
小清新短信闪"
intent.putExtra(Intent.EXTRA_TEXT,
小清新短信闪1.0"
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
returnintent;
4、可拓展的Item
看到那个放大镜了,就是一个可拓展试的Item,看xml中的menu_collapse。
他有俩个属性是android:
android:
是点item后拓展成的View
collapseActionView"
代表他是一个可拓展的Item
Buttonbtnn;
EditTexteditText;
privateShareActionProvidermShareActionProvider;
publi