Android actionBar兼容版本的使用

原创 2015年11月19日 20:39:42

          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 总是显示在菜单栏上。

 如果你想要在操作栏中提供一个“共享”操作,以充分利用安装在设备上的其他应用程序(如,把一张图片共享给消息或社交应用程序使用),那么使用ShareActionProvider类是一个有效的方法,而不是添加一个调用ACTION_SEND类型Intent对象的操作项。当你给一个操作项使用ShareActionProvider类时,它会呈现一个带有能够处理ACTION_SEND类型Intent对象的应用程序的下拉列表(如图3所示)。
                

       图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()方法来更新它。如:

  1. private ShareActionProvider mShareActionProvider;  
  2. ...  
  3.   
  4. @Override  
  5. public boolean onCreateOptionsMenu(Menu menu) {  
  6.     mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();  
  7.   
  8.     // If you use more than one ShareActionProvider, each for a different action,  
  9.     // use the following line to specify a unique history file for each one.  
  10.     // mShareActionProvider.setShareHistoryFileName("custom_share_history.xml");  
  11.   
  12.     // Set the default share intent   
  13.     mShareActionProvider.setShareIntent(getDefaultShareIntent());  
  14.   
  15.     return true;  
  16. }  
  17. // When you need to update the share intent somewhere else in the app, call  
  18. // mShareActionProvider.setShareIntent()  
       上例中ShareActionProvider对象处理所有的跟这个菜单项有关的用户交互,并且不需要处理来自onOptionsItemSelected()回调方法的点击事件。



	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		ActionBar actionbar=getActionBar();
	     actionbar.setDisplayHomeAsUpEnabled(true);
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		//inflater 菜单xml
		getMenuInflater().inflate(R.menu.main, menu);
		//得到菜单里的Item
		MenuItem 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;
	}
	
  // 选择菜单后的回调方法
	@Override
	public 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标签


@Override
	protected 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;
		 }

		@Override
		public void onTabSelected(Tab tab, FragmentTransaction ft) {
		
			ft.replace(R.id.container, f);
		}

		@Override
		public void onTabUnselected(Tab tab, FragmentTransaction ft) {
			// TODO Auto-generated method stub
			
		}

		@Override
		public 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 {

	@Override
	protected 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;">@Override
	protected 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() {
			@Override
			public 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的作用 actionBar的作用主要是为了显示当前activity所在的位置,为你的 app 维护了持续的同一标识。 二、actionBar在3.0版本以上的使用 我们...

低版本的android系统如何使用ActionBar

从android 3.0开始,android加入了一个新的api,actoinbar,不得不说3.0之前android的标题栏确实比较丑,并且还没有任何功能,大部分情况下我都是直接将其隐藏的。 ...

Android_低版本使用ActionBar

简介 Android3.0才开始支持ActionBar,那么怎么在低版本也能用ActionBar呢? 1、使用Google提供的Support Library(android-su...

Android 2.x版本使用ActionBar-强制显示OverflowButton

本博客通过在android2.x中使用ActionBar出现很多问题,比如overflow按钮出不来,菜单显示文字不显示图标等等,通过具体例子一步一步进行介绍,最后从android源码角度进行分析,以...

Android_低版本使用ActionBar

简介 Android3.0才开始支持ActionBar,那么怎么在低版本也能用ActionBar呢? 1、使用Google提供的Support Library(android-su...

低版本android如何使用ActionBar

3.0以前的提供的ActionBar,以它简洁的界面,统一的风格控制,及丰富的功能,为开发者所喜爱。大量的应用使用了ActionBar,然而市面上扔存在大量的Android 2.2 , 2.3 的设备...

actionBar兼容2.1及以上版本的做法

正在准备一个项目,需要尊重android design的同时还要做到很好的兼容低版本,于是就先从actionBar开始吧。 1,新建一个android工程startActionB...

actionBar兼容2.1及以上版本的做法

马上要做一个项目,要尊重android design的同时还要做到很好的兼容低版本,于是就先从actionBar开始吧。 1,新建一个android工程startActionBar,minSdkV...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)