目的是讓3.0以下的裝置也能夠使用ActionBar,
其實在ActionBarCompat推出之前,
大部份的developer應該都是使用ActionBarSherlock作為backward compatibility的lib!
但我一直都沒有把ActionBarSherlock拿來放在一個production的app,
原因是因為可能有一天它就失去支援,那到時候我就很麻煩,可能要跳進去自己改了!
但現在有了ActionBarCompat,且是Google推出的,支援度應該會較好!
這篇就是教大家怎麼整合最基本的ActionBarCompat,
讓大家的app可以向下相容actionbar!
首先要先import ActionBarCompat這個lib,
而ActionBarCompat的source code會放在android sdk之中,
路徑應該為:
android-sdk-macosx/extras/android/support/v7/appcompat
接著在你的project點選右鍵->選擇Properties->選擇Android
會看到下圖
接著點選上圖中的Add按鈕,就會看到下圖,
看到下圖後,請選擇android-support-v7-appcompat,
選完以後就會看到下圖,請按下按鈕OK!
完成以後就能在你的project裡面使用actionbar了,只差一些設定了!
1. 先換Style
記得換掉values, values-v11, values-v14裡面所有的style.xml,
把AppBaseTheme的parent改成下列的example,
如果你不是一個新的project,你可能有自己的theme,那麼就把他的parent換成下面的吧!
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light">
</style>
2. extend ActionBarActivity
接著要把你主要的Activity換成extend ActionBarActivity,如下
package net.kenyang.practiceactionbarcompat;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
3. 修改menu/main.xml
你的project應該會有一個預設的main.xml
那麼你需要做兩件事:
- 將root element新增一個attribute
- 替
- element新增一個attribute
如下:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:actionbar="http://schemas.android.com/apk/res-auto" >
<item
android:id="@+id/action_settings1"
android:icon="@drawable/ic_launcher"
android:orderInCategory="0"
actionbar:showAsAction="ifRoom"
android:title="@string/action_settings"/>
<item
android:id="@+id/action_settings2"
android:orderInCategory="100"
android:showAsAction="never"
android:title="@string/action_settings"/>
</menu>
注意上面的例子,
第一個item和第二個item有一個attribute不一樣!
就是showAsAction,一個是actionbar,另一個是android!
如果你想要這顆menu獨立顯示為一個action item的話,
請改成actionbar,否則用android的話,你永遠看不到那顆action item,
如果是android 3.0以上,它會被隱藏在下圖中右上角的點點點之中!
如果是android 2.x系列,就會在menu裡面!
所以請都改成actionbar:showAsAction!
最後請注意actionbar:showAsAction有很多個選項,
如ifRoom, never, always...etc
可以自己去試試看各自的差別!
只要完成上述三個步驟!
就完成一個很基本的actionbarcompat!
且可以向下相容至2.x的device上!!
在後面幾篇會告訴大家
- 如何用actionbarcompat加入tabs!(這裡)
- swipe to switch tabs.
- style actionbar