Android ActionBar入门

来源:互联网 发布:零基础学php要多久 编辑:程序博客网 时间:2024/06/04 19:53

一、Android3.0(API11)版本推出了Action Bar用于规范应用操作。Action Bar会在头部显示如下样式的内容:

重要的操作可以通过图表显示出来,不重要的或者暂时用不到的功能会隐藏起来。Action Bar使用也比较简单。主要是通过自定义/res/menu下的xml文件控制其显示样式。如上图所示样式的xml文件可以写成这样的格式。

<menu xmlns:android="http://schemas.android.com/apk/res/android" >    <!-- Search, should appear as action button -->    <item android:id="@+id/action_search"          android:icon="@drawable/ic_action_search"          android:title="@string/action_search"          android:showAsAction="ifRoom" />    <!-- Settings, should always be in the overflow -->    <item android:id="@+id/action_settings"          android:title="@string/action_settings"          android:showAsAction="never" /></menu>

其中android:showAsAction是比较重要的一点。它有ifRoom,never,withText,always,collapseActionView参数。ifRoom表示如果头部当前有空间就显示,没有就隐藏。Never表示永远隐藏。在Activity中只需要通过重写onCreateOptionsMenu() 即可。

@Overridepublic boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu items for use in the action bar    MenuInflater inflater = getMenuInflater();    inflater.inflate(R.menu.main_activity_actions, menu);    return super.onCreateOptionsMenu(menu);}@Overridepublic boolean onOptionsItemSelected(MenuItem item) {    // Handle presses on the action bar items    switch (item.getItemId()) {        case R.id.action_search:            openSearch();            return true;        case R.id.action_settings:            openSettings();            return true;        default:            return super.onOptionsItemSelected(item);    }}

二、Action Bar提供了向上功能,方便用户返回到上一个Activity。只需要在androidmanifes.xml的activity中加入meta-data即可。

然后在Activity的onCreate方法中设置显示向上按钮。

<application ... >    ...    <!-- The main/home activity (it has no parent activity) -->    <activity        android:name="com.example.myfirstapp.MainActivity" ...>        ...    </activity>    <!-- A child of the main activity -->    <activity        android:name="com.example.myfirstapp.DisplayMessageActivity"        android:label="@string/title_activity_display_message" >        <!-- Parent activity meta-data to support 4.0 and lower -->        <meta-data            android:name="android.support.PARENT_ACTIVITY"            android:value="com.example.myfirstapp.MainActivity" />    </activity></application>



 @Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_displaymessage);    If your minSdkVersion is 11 or higher, instead use:    getActionBar().setDisplayHomeAsUpEnabled(true);}

三、Action Bar的全部功能都要在API 11版本上使用,在低版本上需要通过添加Support Library v7-appname.jar支持。具体的添加方法可以参考这篇文章。V7最低版本支持到API 7。添加好依赖jar后,让使用到Action Bar的Activity继承自ActionBarActivity。

/res/menu下的xml文件也要修改成如下格式:

<menu xmlns:android="http://schemas.android.com/apk/res/android"      xmlns:yourapp="http://schemas.android.com/apk/res-auto" >    <!-- Search, should appear as action button -->    <item android:id="@+id/action_search"          android:icon="@drawable/ic_action_search"          android:title="@string/action_search"          yourapp:showAsAction="ifRoom"  />    ...</menu>

Action Bar向上功能也要做出修改。向androidmanifes.xml的activity标签添加android:parentActivityName="要返回到的activity的全路径"。

<application ... >    ...    <!-- The main/home activity (it has no parent activity) -->    <activity        android:name="com.example.myfirstapp.MainActivity" ...>        ...    </activity>    <!-- A child of the main activity -->    <activity        android:name="com.example.myfirstapp.DisplayMessageActivity"        android:label="@string/title_activity_display_message"        android:parentActivityName="com.example.myfirstapp.MainActivity" >    </activity></application>


 

在对应Activity的onCreate中修改成如下语句:

@Overridepublic void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_displaymessage);    getSupportActionBar().setDisplayHomeAsUpEnabled(true);    // If your minSdkVersion is 11 or higher, instead use:    // getActionBar().setDisplayHomeAsUpEnabled(true);}

这样就能够在API 7及以上版本使用ActionBar了


四、Android为Action Bar提供了一些默认的主题。
Theme.Holo.dark 黑色重口味风格


Theme.Holo.Light 白色小清新风格

Theme.Holo.Light.DarkActionBar 以上两种风格的串儿 

在<application android:theme=" @android :style/Theme.Holo.Light" ... />指定即可。

在开发中肯定会需要自定义ActionBar的背景颜色。比如实现如下的效果:
fuubo微博客户端

印象笔记


在styles.xml文件中定义一个属于你自己的风格,同时最好给你的风格找一个爹,不推荐一切都从头来过。例如:
<?xml version="1.0" encoding="utf-8"?> <resources>    <!-- the theme applied to the application or activity -->    <style name="CustomActionBarTheme"           parent="@style/Theme.Holo.Light.DarkActionBar">        <item name="android:actionBarStyle">@style/MyActionBar</item>    </style>    <!-- ActionBar styles -->    <style name="MyActionBar"           parent="@style/Widget.Holo.Light.ActionBar.Solid.Inverse">        <item name="android:background">@drawable/actionbar_background</item>    </style></resources>

有了自己的风格就可以骄傲的在在<application android:theme="@style/CustomActionBarTheme" ... />指定了。

背景可以自定义,ActionBar上的颜色当然也可以了。修改ActionBar上的文字需要重写每个文本元素的titleTextStyle

属性,同时需要指定副主题为TextAppearance.Holo.Widget.ActionBar.Title。

 <!-- ActionBar title text -->     <style      name="MyActionBarTitleText"                 parent="@style/TextAppearance.Holo.Widget.ActionBar.Title">              <item name="android:textColor">@color/actionbar_text</item>     </style> 
0 0
原创粉丝点击