Android actionBar兼容版本的使用
来源:互联网 发布:宝鸡大数据产业园 编辑:程序博客网 时间:2024/04/28 05:22
Action bar是一个标识应用程序和用户位置的窗口功能,并且给用户提供操作和导航模式。在大多数的情况下,当你需要突出展现用户行为或全局导航的activity中使用action bar,因为action bar能够使应用程序给用户提供一致的界面,并且系统能够很好根据不同的屏幕配置来适应操作栏的外观。你能够用ActionBar的对象的API来控制操作栏的行为和可见性,这些API被添加在Android3.0(API 级别 11)中。
从Android3.0(API级别 11)开始,Action bar被包含在所有的使用Theme.Hole主题的Activity(或者是这些Activity的子类)中,当targetSdkVersion或minSdkVersion属性被设置为“11”或更大的数值是,这个主题是默认的主题一。如:
Holo.Light.DarkActionBar 风格是黑色背景白色字体 对应最低版本是14
<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="18"
android:Theme.Holo.Light 主题 对应版本11
</pre>最低版本是14以上的系统会自动到values-14包下找到相关主题,如果版本大于14的话,系统会直接找最大的,也就是values-14. <p><span style="font-family:Arial;color:#333333;LINE-HEIGHT: 26px"><span style="font-size:18px;"></span></span><pre class="html" name="code" snippet_file_name="blog_20151119_3_6893304" code_snippet_id="443132"> android:theme="@style/AppBaseTheme"
<!-- Base application theme for API 14+. This theme completely replaces AppBaseTheme from BOTH res/values/styles.xml and res/values-v11/styles.xml on API 14+ devices. --> <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> <!-- API 14 theme customizations can go here. --> </style>在清单文件中引用系统主题
android:theme="@android:style/android:Theme.Holo.Light.DarkActionBar"
android:theme="@style/CustomActionBarTheme"
删除actionbar
<activity android:theme="@android:style/Theme.Holo.NoActionBar">或者代码 把actionbar隐藏
ActionBar actionBar = getActionBar(); actionBar.hide();
首先介绍3.0以上系统actionbar的使用
菜单项
<item android:id="@+id/action_share" android:actionProviderClass="android.widget.ShareActionProvider" android:showAsAction="ifRoom" android:title="@string/share"/> <item android:id="@+id/action_search" android:icon="@drawable/ic_action_search" android:showAsAction="ifRoom" android:title="@string/search"/> <item android:id="@+id/action_setting" android:showAsAction="never" android:title="@string/setting"/>
showAsAction 模式介绍 never 不显示在菜单栏上,把item放在overflow里 (折叠菜单)
,ifRoom如果有空间就显示,没空间就放在overflow。
,withText 菜单项和它的图标,菜单文本一起显示。
,collapseActionView, 让操作视图可以折叠起来。
always 总是显示在菜单栏上。
图3 Gallery 应用截屏,用ShareActionProvider对象展开显示共享目标。
创建子菜单的所有逻辑,包括共享目标的封装、点击事件的处理(包在溢出菜单中的项目显示)等,都在ShareActionProvider类中实现了---你需要编写的唯一的代码是给对应的菜单项声明操作提供器,并指定共享的Intent对象。
默认情况,ShareActionProvider对象会基于用户的使用频率来保留共享目标的排列顺序。使用频率高的目标应用程序会显示在下来列表的上面,并且最常用的目标会作为默认共享目标直接显示在操作栏。默认情况下,排序信息被保存在由DEFAULT_SHARE_HISTORY_FILE_NAME指定名称的私有文件中。如果你只使用一种操作类型ShareActionProvider类或它的一个子类,那么你应该继续使用这个默认的历史文件,而不需要做任何事情。但是,如果你使用了不同类型的多个操作的ShareActionProvider类或它的一个子类,那么为了保持它们自己的历史,每种ShareActionProvider类都应该指定它们自己的历史文件。给每种ShareActionProvider类指定不同的历史文件,就要调用setShareHistoryFileName()方法,并且提供一个XML文件的名字(如,custom_share_history.xml)
注意:尽管ShareActionProvider类是基于使用频率来排列共享目标的,但是这种行为是可扩展的,并且ShareActionProvider类的扩展能够基于历史文件执行不同的行为和排序。
要添加ShareActionProvider对象,只需简单的给android.actionProviderClass属性设定android.widget.ShareActionProvider属性值就可以了。唯一要做的事情是定义你要用于共享的Intent对象,你必须先调用getActionProvider()方法来获取跟菜单项匹配的ShareActionProvider对象,然后调用setShareIntent()方法。
如果对于共享的Intent对象的格式依赖与被选择的菜单项,或其他的在Activity生存周期内改变的变量,那么你应该把ShareActionProvider对象保存在一个成员属性里,并在需要的时候调用setShareIntent()方法来更新它。如:
- private ShareActionProvider mShareActionProvider;
- ...
- @Override
- public boolean onCreateOptionsMenu(Menu menu) {
- mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
- // If you use more than one ShareActionProvider, each for a different action,
- // use the following line to specify a unique history file for each one.
- // mShareActionProvider.setShareHistoryFileName("custom_share_history.xml");
- // Set the default share intent
- mShareActionProvider.setShareIntent(getDefaultShareIntent());
- return true;
- }
- // When you need to update the share intent somewhere else in the app, call
- // mShareActionProvider.setShareIntent()
private ShareActionProvider mShareActionProvider;...@Overridepublic boolean onCreateOptionsMenu(Menu menu) { mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); // If you use more than one ShareActionProvider, each for a different action, // use the following line to specify a unique history file for each one. // mShareActionProvider.setShareHistoryFileName("custom_share_history.xml"); // Set the default share intent mShareActionProvider.setShareIntent(getDefaultShareIntent()); return true;}// When you need to update the share intent somewhere else in the app, call// mShareActionProvider.setShareIntent()上例中ShareActionProvider对象处理所有的跟这个菜单项有关的用户交互,并且不需要处理来自onOptionsItemSelected()回调方法的点击事件。
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);ActionBar actionbar=getActionBar(); actionbar.setDisplayHomeAsUpEnabled(true);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {//inflater 菜单xmlgetMenuInflater().inflate(R.menu.main, menu);//得到菜单里的ItemMenuItem shareItem = menu.findItem(R.id.action_share);//得到ShareActionProvider组件mShareActionProvider = (ShareActionProvider) shareItem.getActionProvider();//设置intent 跳转页面mShareActionProvider.setShareIntent(getDefaultIntent());return true;}private Intent getDefaultIntent(){//发送意图 查看手机有这方面的应用Intent intent = new Intent(Intent.ACTION_SEND);//可以发送图片类型intent.setType("image/*");return intent;} // 选择菜单后的回调方法@Overridepublic boolean onOptionsItemSelected(MenuItem item) {switch (item.getItemId()){case android.R.id.home:finish();break;case R.id.action_search:Toast.makeText(this, "Action_Search", 0).show();break;case R.id.action_setting:Toast.makeText(this, "Action_Setting", 0).show();break;}return super.onOptionsItemSelected(item);}在Themes.xml里
<span style="font-size:18px;"><?xml version="1.0" encoding="utf-8"?><resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="CustomActionBarTheme" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarStyle">@style/CustomBackground</item> </style> <style name="CustomBackground" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:background">@drawable/actionbar_background</item> </style> <style name="CustomActionBarOverlayTheme" parent="@android:style/Theme.Holo" > <item name="android:windowActionBarOverlay">true</item> </style></resources></span>
actionbar 的tab标签
@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); container=this.findViewById(R.id.container);ActionBar s= getActionBar();s.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);for(int i=0;i<4;i++){s.addTab(s.newTab().setText("标签"+i).setTabListener(new MyTabListener(new fragment("海贼王"+i))));}} class MyTabListener implements TabListener{ Fragment f; public MyTabListener(Fragment f){ this.f=f; }@Overridepublic void onTabSelected(Tab tab, FragmentTransaction ft) {ft.replace(R.id.container, f);}@Overridepublic void onTabUnselected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub}@Overridepublic void onTabReselected(Tab tab, FragmentTransaction ft) {// TODO Auto-generated method stub} }actionbar一些样式:
<style name="Theme.Xuexi" parent="@android:style/Theme.Holo.Light.DarkActionBar"> <item name="android:actionBarItemBackground">@drawable/selectable_background_xuexi</item> <item name="android:popupMenuStyle">@style/PopupMenu.Xuexi</item> <item name="android:dropDownListViewStyle">@style/DropDownListView.Xuexi</item> <item name="android:actionBarTabStyle">@style/ActionBarTabStyle.Xuexi</item> <item name="android:actionDropDownStyle">@style/DropDownNav.Xuexi</item> <item name="android:actionBarStyle">@style/ActionBar.Solid.Xuexi</item> <item name="android:actionModeBackground">@drawable/cab_background_top_xuexi</item> <item name="android:actionModeSplitBackground">@drawable/cab_background_bottom_xuexi</item> <item name="android:actionModeCloseButtonStyle">@style/ActionButton.CloseMode.Xuexi</item> <!-- Light.DarkActionBar specific --> <item name="android:actionBarWidgetTheme">@style/Theme.Xuexi.Widget</item> </style> <style name="ActionBar.Solid.Xuexi" parent="@android:style/Widget.Holo.Light.ActionBar.Solid.Inverse"> <item name="android:background">@drawable/ab_solid_xuexi</item> <item name="android:backgroundStacked">@drawable/ab_stacked_solid_xuexi</item> <item name="android:backgroundSplit">@drawable/ab_bottom_solid_xuexi</item> <item name="android:progressBarStyle">@style/ProgressBar.Xuexi</item> <item name="android:itemPadding">@dimen/actionbar_padding</item> </style> <style name="ActionBar.Transparent.Xuexi" parent="@android:style/Widget.Holo.ActionBar"> <item name="android:background">@drawable/ab_transparent_xuexi</item> <item name="android:progressBarStyle">@style/ProgressBar.Xuexi</item> </style> <style name="PopupMenu.Xuexi" parent="@android:style/Widget.Holo.ListPopupWindow"> <item name="android:popupBackground">@drawable/menu_dropdown_panel_xuexi</item> </style> <style name="DropDownListView.Xuexi" parent="@android:style/Widget.Holo.ListView.DropDown"> <item name="android:listSelector">@drawable/selectable_background_xuexi</item> </style> <style name="ActionBarTabStyle.Xuexi" parent="@android:style/Widget.Holo.ActionBar.TabView"> <item name="android:background">@drawable/tab_indicator_ab_xuexi</item> </style> <style name="DropDownNav.Xuexi" parent="@android:style/Widget.Holo.Spinner"> <item name="android:background">@drawable/spinner_background_ab_xuexi</item> <item name="android:popupBackground">@drawable/menu_dropdown_panel_xuexi</item> <item name="android:dropDownSelector">@drawable/selectable_background_xuexi</item> </style> <style name="ProgressBar.Xuexi" parent="@android:style/Widget.Holo.ProgressBar.Horizontal"> <item name="android:progressDrawable">@drawable/progress_horizontal_xuexi</item> </style> <style name="ActionButton.CloseMode.Xuexi" parent="@android:style/Widget.Holo.ActionButton.CloseMode"> <item name="android:background">@drawable/btn_cab_done_xuexi</item> </style> <!-- this style is only referenced in a Light.DarkActionBar based theme --> <style name="Theme.Xuexi.Widget" parent="@android:style/Theme.Holo"> <item name="android:popupMenuStyle">@style/PopupMenu.Xuexi</item> <item name="android:dropDownListViewStyle">@style/DropDownListView.Xuexi</item> </style></resources>
在android2.1以上的设备 工程需要 依赖android-support-v7-appcompat 兼容包
跟3.0相比有些不同 如下:
要加入命名空间 :xmlns:juntao="http://schemas.android.com/apk/res-auto"
showAsAction 和actionViewClass 都需要用自定义命名空间
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:juntao="http://schemas.android.com/apk/res-auto" ><!-- <item --><!-- android:id="@+id/action_search" --><!-- android:icon="@drawable/ic_action_search" --><!-- android:title="@string/search" --><!-- juntao:showAsAction="ifRoom" --><!-- /> --> <item android:id="@+id/menu_search" juntao:actionViewClass="android.widget.SearchView" android:icon="@drawable/ic_action_search" juntao:showAsAction="ifRoom|collapseActionView" android:title="@string/search"> </item></menu>继承actionbarActivity
public class MainActivity extends ActionBarActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);getSupportActionBar().setDisplayHomeAsUpEnabled(true);}Themes.xml下的主题文件:
@style/Theme.AppCompat.Light.DarkActionBar 比起3.0的应用 少了android:style 改为@style 和Holo该为AppCompat
<?xml version="1.0" encoding="utf-8"?><resources> <style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar"> <item name="actionBarStyle">@style/CustomBackground</item> </style> <style name="CustomBackground" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse"> <item name="background">@drawable/actionbar_background</item> </style> <style name="CustomActionBarOverlayTheme" parent="@style/Theme.AppCompat" > <item name="windowActionBarOverlay">true</item> </style> </resources>
最后来介绍一个ActionbarSherlock 兼容各个版本的actionbar开发:
首先activity要继承SherlockActivity
<span style="font-size:18px;">@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);</span>
<span style="font-size:18px;">ActionBar actionBar = getSupportActionBar();actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_LIST);ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);for (int i=0;i<5;i++)adapter.add("航海王" + i);actionBar.setListNavigationCallbacks(adapter, new OnNavigationListener() {@Overridepublic boolean onNavigationItemSelected(int itemPosition, long itemId) {Toast.makeText(MainActivity.this, "select " + itemPosition, 0).show();return false;}});}</span>
android:theme="@style/Sherlock.__Theme.DarkActionBar"
- Android actionBar兼容版本的使用
- ActionBar在2.X等低版本下的兼容使用
- android ActionBar 兼容低版本之搜索功能
- 使用V7包使安卓3.0以下版本兼容ActionBar
- 低版本的android系统如何使用ActionBar
- android的版本兼容
- [Android] ActionBar的使用
- android ActionBar的使用
- android ActionBar的使用
- Android ActionBar 的使用
- android的ActionBar使用
- android ActionBar的使用
- Android ActionBar的使用
- Android ActionBar的使用
- Android ActionBar的使用
- Android---Actionbar的使用
- actionBar兼容2.1及以上版本的做法
- 带动画的ActionBar --------- ToolBar(兼容低版本)
- 有人向我提了一个 Bug,说 5 分钟就可以搞定
- 获取某一个<tr>中<td>的值
- problem parm
- 同步/异步,阻塞/非阻塞 单线程/多线程
- oracle数据同比的时候除数为0该怎么处理
- Android actionBar兼容版本的使用
- 链接脚本学习
- SSH:Struts1框架(采用struts上传文件)
- myeclipse jar包
- 策略模式与简单工厂模式
- AAC音频格式分析与解码
- Alcatraz 使用教程
- android 新手错误
- 哈希表(HashMap)分析及实现(JAVA)