26 September 2013
ActionBarCompat是Google近期推出的lib,
目的是讓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












blog comments powered by Disqus