最近编辑于2018年4月30日
这篇博客涉及的demo是Androidmanifest.xml下label以 App/Action Bar/开头的activity,都是app文件夹下的类。
一、ActionBarMechanics类
主要讲了代码中新建菜单项的方法
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Menu items default to never show in the action bar. On most devices this means
// they will show in the standard options menu panel when the menu button is pressed.
// On xlarge-screen devices a "More" button will appear in the far right of the
// Action Bar that will display remaining items in a cascading menu.
menu.add("Normal item");
MenuItem actionItem = menu.add("Action Button");
// Items that show as actions should favor the "if room" setting, which will
// prevent too many buttons from crowding the bar. Extra items will show in the
// overflow area.
actionItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
// Items that show as actions are strongly encouraged to use an icon.
// These icons are shown without a text description, and therefore should
// be sufficiently descriptive on their own.
actionItem.setIcon(android.R.drawable.ic_menu_share);
return true;
}
然后以及菜单项点击事件的处理
@Override
public boolean onOptionsItemSelected(MenuItem item) {
Toast.makeText(this, "Selected Item: " + item.getTitle(), Toast.LENGTH_SHORT).show();
return true;
}
二、ActionBarNavigation和ActionBarNavigationTarget
1、
public void onNewActivity(View button) {
Intent intent = new Intent(this, ActionBarNavigationTarget.class);
startActivity(intent);
}
public void onNewDocument(View button) {
Intent intent = new Intent(this, ActionBarNavigationTarget.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_DOCUMENT);
startActivity(intent);
}
使用FLAG_ACTIVITY_NEW_DOCUMENT标签能够在不同的任务中打开该页面,也就是如下
即使该activity与上一个activity处于同一个任务栈,只要使用该标签也会在一个独立的任务栈中创建。
final ActionBar bar = getActionBar();
bar.setDisplayOptions(ActionBar.DISPLAY_HOME_AS_UP, ActionBar.DISPLAY_HOME_AS_UP);
配合
android:parentActivityName=".app.ActionBarNavigation"
可以让actionbar左上角返回键点击后返回上一个页面。
注:v7包中AppCompatActivity类setDisplayHomeAsUpEnabled(true)已经实现了返回上一个页面,不需要指定android:parentActivityName。
三、ActionBarTabs
if (bar.getNavigationMode() == ActionBar.NAVIGATION_MODE_TABS) {
//一般模式下的ActionBar
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
bar.setDisplayOptions(ActionBar.DISPLAY_SHOW_TITLE, ActionBar.DISPLAY_SHOW_TITLE);
} else {
//tab模式下的ActionBar
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
bar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);
}
然后就是addTab(),removeTabAt(),removeAllTabs()方法添加tab,移除tab,移除所有tab。以及tab的监听setTabListener(new TabListener(new TabContentFragment(text))),TabListener中重写onTabSelected(),onTabUnselected(),onTabReselected()选择,没有选中,选中的情况下再次选中三个方法。
四、ActionBarUsage
1、ActionBar上的搜索框
i、该菜单项设置android:actionViewClass="android.widget.SearchView"属性
ii、activity实现OnQueryTextListener接口并实现其中的onQueryTextChange(String newText)和onQueryTextSubmit(String query)方法。
2、onPrepareOptionsMenu(Menu menu)方法在创建菜单(以及展开子菜单)时或调用invalidateOptionsMenu()方法时调用。
五、ActionBarSettingsActionProviderActivity
讲了自定义ActionProvider,可以自定义菜单项,重写其中的onCreateActionView()(可以自定义该菜单项的UI)和onPerformDefaultAction()(点击该菜单项事件的处理)。
六、ActionBarShareActionProviderActivity
讲了Google关于分享的ActionProvider。
七、ActionBarDisplayOptions
讲了ActionBar的flags
1、DISPLAY_HOME_AS_UP返回键
2、DISPLAY_USE_LOGO是否使用应用logo或者系统logo,DISPLAY_SHOW_HOME是否展示该logo
3、DISPLAY_SHOW_TITLE是否显示标题
4、DISPLAY_SHOW_CUSTOM是否显示自定义view
5、NAVIGATION_MODE_TABS(tab模式),NAVIGATION_MODE_LIST(列表模式),NAVIGATION_MODE_STANDARD(一般模式)。
6、actionbar.hide()隐藏ActionBar
7、getWindow().getDecorView().setSystemUiVisibility(0)显示状态栏,getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_FULLSCREEN)隐藏状态栏。