AppCompatを使ったActionBar

とりあえず2.1 API7系列から、v7 appcompat libraryを使ってActionBarが解禁になったとのことで。
Sherlockの頃から気にはなっていたけれども、ライブラリの容量的に自分のアプリにSherlockを導入するほどのことでもなかったので使ってなかった。
カスタムタイトルバーを使って似非ActionBarのようなことはしていた……。
とにかく、Google様がついにサポートしてくれるのならと、倣って導入。

http://developer.android.com/reference/android/support/v7/app/package-summary.html

とりあえず導入方法についてはここに倣えばよし。
https://developer.android.com/tools/support-library/setup.html
下手にjarだけ突っ込むと引っかかるということだけは明記しとく。Resourceがjarに入ってない。

https://developer.android.com/training/basics/actionbar/setting-up.html

public class ActionBarActivity extends ActionBarActivity{

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		<!-- ActionBarもこうやって取得できる。 -->
		ActionBar ab = getSupportActionBar();
	}
}
<style name="AppBaseTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
	<!--
		Theme customizations available in newer API levels can go in
		res/values-vXX/styles.xml, while customizations related to
		backward-compatibility can go here.
	-->
	<!-- Support library compatibility -->
	<item name="actionBarStyle">@style/MyActionBar</item>
</style>
        <activity
            android:name=".ActionBarActivity"
            android:label="@string/app_name"
            android:theme="@style/AppBaseTheme" />

とかやるわけだけど、ここでvalues-v11やvalues-v14をきちんと別に設定しておかないと、actionBarStyleがv11以上の機種だと反映されない。

参考URL:https://developer.android.com/training/basics/actionbar/styling.html

ここにあるように。

<?xml version="1.0" encoding="utf-8"?>
<resources>
	<!-- the theme applied to the application or activity -->
	<style name="CustomActionBarTheme" parent="@style/Theme.AppCompat.Light.DarkActionBar">
		<!-- APIレベルが11以下だとエラーを吐く -->
		<item name="android:actionBarStyle">@style/MyActionBar</item>

		<!-- Support library compatibility -->
		<!-- APIレベルが11以上だと反映されない -->
		<item name="actionBarStyle">@style/MyActionBar</item>
	</style>
	<!-- ActionBar styles -->
	<style name="MyActionBar" parent="@style/Widget.AppCompat.Light.ActionBar.Solid.Inverse">
		<item name="android:background">@drawable/actionbar_background</item>
		<!-- Support library compatibility -->
		<item name="background">@drawable/actionbar_background</item>
	</style>
</resources>

なので、styles.xmlはきちんと分けましょう、という基本中の基本のお話。

とりあえず以上。

こんなに簡単にActionBarが動くようになるとは思わなかったので、ちょっと感動。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です