ActionBarCompat
一般的にAndroid3.x以下のバージョンにおいてはActionBarそのものがサポートされてない。でAndroidのサンプル集にActionBarCompatっていうのがあって、それを利用する事でAndroid3.x以下のバージョンでもActionBar同様なUIを実現する事は出来る模様(但し、ActionBarクラス自体が存在する訳じゃないのでそれは使えない。あくまでUI的な所かと)
使い方は以下の通りかと
- AndroidサンプルからActionBarCompatをライブラリプロジェクトとしてインポート
- アプリのプロジェクトを作成(既存するのでもオッケー)した後にプロジェクト設定でActionBarCompatのライブラリプロジェクトをインポートする
- アプリのスタイル設定でAppTheme((ActionBarCompatに定義されている))を設定
- ActivityはActionBarActivityを継承する
っていう感じだと思われる。で例えば「スタイルを変更したい場合」とかになるとres/xml/styles.xmlを作って
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MyAppTheme" parent="@style/AppTheme">
<item name="android:windowTitleBackgroundStyle">@style/MyActionBarCompat</item>
</style>
<style name="MyActionBarCompat" parent="@style/ActionBarCompat">
<item name="android:background">#000</item>
</style>
</resources>
みたいにActionBarCompatなstyleを継承した形で作り、アプリが参照するandroid:themeを変えてしまえば良いかと。まぁそんな感じでやればAndroid3.x以下のバージョンでもActionBarっぽいUIを利用する事は出来る模様
ついでに今回のソースもろもろを一応書いておく
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="sample.test"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/MyAppTheme">
<activity
android:name="sample.test.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
MainActvitiy.java
package sample.test;
import com.example.android.actionbarcompat.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
int itemId = menuItem.getItemId();
if (itemId == android.R.id.home) {
makeToast("home");
} else if (itemId == R.id.menu_refresh) {
makeToast("refresh");
} else if (itemId == R.id.menu_search) {
makeToast("search");
}
return super.onOptionsItemSelected(menuItem);
}
private void makeToast(String text) {
Toast.makeText(this, text, Toast.LENGTH_LONG).show();
}
}
スクリーンショット
Android2.2の場合は
Android.4.xの場合は(スタイル修正適応前な為若干異なる)
というようになる
最後に、ActionBarすらサポートされてないバージョン向けなアプリはもう必要ないと思います。まぁ業務活用な端末とかでバージョンが古い場合とかに限ってはUIを統一性させる為にこういうのは必要でしょうっていう所だと思う。一般的なWebサービス連携アプリとかの場合になるとAndroid4.x以下のサポートはもう要らないと思う