android ActionBar (doc)

发表于:,更新于:,By Sally
大纲
  1. 1. 配置action bar (setting up the action bar)
    1. 1.1. 在android > 3.0版本 (API level 11)
    2. 1.2. 在android > 2.1版本 (API level 7)
  2. 2. 为action bar添加buttons
  3. 3. action bar的样式
  4. 4. overlaying the action bar

配置action bar (setting up the action bar)

在android > 3.0版本 (API level 11)

  • android3.0开始,action bar可以通过Theme.Holo主题来引用,并且是一个默认主题
1
2
3
4
// 使用时,只需要指定sdk版本>11即可
<manifest ...>
<uses-sdk android:minSdkVersion="11" .../>
</manifest>

注:如果定制theme,必须指定custom theme 的parent 是Theme.Holotheme

在android > 2.1版本 (API level 7)

  • 需要引入v7 appcompat library

  • 使我们的activity继承自ActionBarActivity

1
public class MainActivity extends ActionBarActivity {}
  • 在manifest文件中,指定<application> 或者 个别的<activity> 元素使用Theme.AppCompattheme
1
<activity android:theme="@style/Theme.AppCompat.Light" ...>

注: 如果是定制theme,需要指定其parent为Theme.AppCompat

  • 最后,在manifest设置api level
1
2
3
<manifest ...>
<uses-sdk android:minSdkVersion="7" android:targetSdkVersion="18" />
</manifest>

为action bar添加buttons

  • 指定actions的xml,在res/menu/文件夹下添加menu xml文件
1
2
3
4
5
6
7
8
9
<!-- 注意 showAsAction 属性 -->
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_search"
<item android:id="@+id/action_settings"
android:title="@string/action_settings"
android:showAsAction="never" />

</menu>

当app版本在2.1及以下,通过support包实现actionbar时,showAsAction属性在android:命名空间下不可用,该属性通过support包提供,所以需要自定义命名空间来使用showAsAction属性

1
2
3
4
5
6
7
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:myapp="http://schemas.android.com/apk/res-auto" >

<item android:id="@+id/action_search"
android:icon="@drawable/ic_action_search"
android:title="@string/action_searth"
myapp:showAsAction="ifRoom" />

</menu>
  • 在布局中引入menu onCreateOptionsMenu() - 将actions添加到action bar上
1
2
3
4
5
6
@override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main_activity_actions, menu);
return super.onCreateOptionsMenu(menu);
}
  • 添加menu的点击事件 onOptionsItemSelected()
1
2
3
4
5
6
7
8
9
@override
public boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_searth:
return true;
case R.id.action_settings:
return true;
}
}
  • add up button for low-level activities - 在manifest指定activity的parent,并在oncreate()方法中调用setDisplayHomeAsUpEnabled()即可
1
2
3
4
5
6
7
8
9
10
11
12
13
<application ...>
<activity
android:name="com.example.firstapp.MainActivity" ..>

<activity
android:name="com.example.firstapp.DisplayMessageActivity"
android:label="@string/title_activity_display_message"
android:parentActivityName="com.example.firstapp.MainActivity" >

<!-- Parent activity meta-data to support 4.0 and lower -->
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="com.example.firstapp.MainActivity" />

</activity>
</application>
1
2
3
4
5
6
7
8
9
@override
public void onCreawte(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);
}

action bar的样式

  • Theme.Holo for a ‘dark’ theme
  • Theme.Holo.Light for a ‘light’ theme
  • Theme.Holo.Light.DarkActionBar for eh light theme with a dark action bar

  • 定制背景颜色,文本颜色,tab指示器 /getting started/adding the action bar/styling the action bar

overlaying the action bar

  • enable overlay mode

  • specify layout top-margin