Android support-v7でActionBarをGingerbreadとJelly Beanで使った時のメモ書き
新たなアプリ作る際に、これまでのレガシーな下から出てくるメニューは使いたくなかったので、3.0以降で利用できるActionBarをAndroid2.2以降で利用出来るライブラリ、「Android-support-v7」を使ってみたのですが、その時に少し嵌った所をメモ書きしています。
環境はWindows8.1、ADTのバージョンはv22.3.0-887826です。
既存のプロジェクトへインポート
既存のプロジェクトにインポートするのに調べるのに時間がかかったのでメモ書き。他のブログだと大体新規作成からしか載ってなかったのでちょっとはまったのです。
簡潔に書くけど、まず、AdModのように既存のプロジェクトにインポートしてもダメだったので、Eclipseのプロジェクトとしてandroid-support-v7-appcompatをインポートで解決。
Android SDK ManagerでAndroid Support Libraryをインストール後、File→ImportでAndroidのExisting Android Code Into Workspaceを選択。まぁここは書くまでもないけど念のためメモ書き。
SDKのExtrasフォルダ→android→support→v7→appcompatを選択。そしてCopy projects into workspaceにチェック。プロジェクト上で右クリック→Properties→Android→LibraryのAddをクリックでv7インポートで完了。
※v7をコピーして、libsやAndroid Private Librariesフォルダに入れても出現しないので選択できなかった。
以上で「parent="Theme.AppCompat.Light.DarkActionBar"」と指定してもエラーにならないで済みました。
何言ってるか分からない?ここに辿り着いた人はきっとこのエラーにムカッと来た人達だと思うので割愛w 簡潔に言えばAndroid-support-v7インポートしたのに「そんなテーマありませんょ」とEclipseに言われたって事なのです。3つあるテーマを試してもダメではまったんだけどね。。
因みに僕はAndroidManifest.xmlではなくThemes.xmlを作ってその中に記載してます。
<resources xmlns:android="http://schemas.android.com/apk/res/android">
<style name="MikuTheme"parent="Theme.AppCompat.Light.DarkActionBar"></style>
<style name="AppTheme" parent="MikuTheme"></style>
</resources>
あと、menu.xmlに「xmlns:app="http://schemas.android.com/apk/res-auto"」を追加。v7のリソースを使用する際に必要な名前空間だそうです。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" ← ここ追加>
あとはActionBarActivityをextendsして、メニューを作成すればとりあえず完成。
僕の場合、xmlでレイアウト定義できるものは定義するのでコーディングはシンプルになってる。因みにonCreatePanelMenuの作成エラーが出たので調べて試したけど、僕の場合は結局全く関係なかったね。
※下記は上がメニュー作成、下が選択後の動作。アメブロが糞過ぎていちいちエスケープ文字書いても文字が消えたりするのでスクショにしてます。次回原因調べてみるけどさ。。
2.3.3はActionBarが出たのに4.2では出なかった
ぶっちゃけ、タイトルバーを消す時に使用する「requestWindowFeature(Window.FEATURE_NO_TITLE);」を宣言してると4.2では出ないという落ちでしたので、メモ書き。
SH-12Cでは出たのにN-05Eでは出なかったので、ここでActionBarやメニュー作成方法を色々試して時間をとってしまった。よくよく観察して試して解決したのです。
メニューにアイコンを追加とか
これは基本なので書かなくてもいいのだけど、ついでなのでメモ書き。
メニューの「item」の中にapp:showAsAction="ifRoom"と記載するとActionBarにメニューが表示されます。ifRoom等の属性は直ぐ分かるので割愛。
また、3.0以前にはない、3段になってるメニューアイコンは、「©drawable/abc_ic_menu_moreoverflow_normal_holo_dark」をitemタグ内に指定する事で利用可能。
android:iconで、drawableでabc_ic_menu_moreoverflow_normal_holo_darkを指定。
それで文字ではなくN-05Eでも見慣れた三段のMoreアイコンが利用出来たと思ったけど、このアイコンがボタンの役割をしているので、この中に他のメニューが隠れているわけではない事に気が付いた。
因みに右はSpinnerでメニューを試しに作成したところ。色々なやり方がありますねぇ。
まぁメニューはまた本日いろいろ試すとして、時間もあまりなく、いつもの如くメモ書き程度ですが参考になれば幸いです。
valuesとvalues-v11でGingerbreadとJelly BeanでActionBarの背景色等を変更
2014/2/16、追記です。因みに僕の誕生日です><
Android2.3.3と4.1でappcompatのActionBarの背景色等を変更した際に、4.1の方が反映されなかったので、解決策のメモ書きです。
ぶっちゃけレイアウトを基本通りにvaluesとvalues-v11(Android3.0以降のレイアウトで反映)で分けて、それぞれに上記のチェック部分に注意してxmlファイルを作成すれば反映されます。
こちらはAndoid2.3.3でカスタマイズしたメニュー
こちらはAndroid4.1でカスタマイズしたメニュー。両方共に同様に反映されています。
ブログ移行してます → Newとまとじゅーすのブログ