2013年11月11日月曜日

ActionBarを使ってみる(Support Library v7の設定。Android 2.2以上)

Android 2系でActionBarを利用するにはSupport Library v7が必要になります(´;ω;`)ウッ…

ActionBarはAndroid3.0以上であれば、次の2つの条件を満たしていれば
自動的にActionBarが追加されるそうです
・android:targetSdkVersion属性に11以上を指定、またはandroid:minSdkVersion属性に11以上を指定
※ActionBarのタブなどを利用するには、minSdkVersionが11以上である必要がある。
・ホログラフィック(もしくはホログラフィックを継承したテーマ)以外のテーマを明示的に指定していない場合

まずは、その準備を行いたいと思います。

■1.Android Support Library v7の場所を確認する

Android SDK ManagerでAndroid Support Libraryがインストールされている場合には、
SDKのインストールした場所に、Support Libraryが配置されているので、
そのディレクトリを開きます。

自分の場合には、SDKを次の場所にインストールをしたので、

C:\app\android-sdk\sdk

C:\app\android-sdk\sdk\extras\android\support

に配置されていました。

このディレクトリの中にv4,v7,v13というディレクトリが、
各API Levelに対応したSupport Libraryになります。

今回はActionBarを利用するためv7を利用します。

v7のディレクトリに「appcompat」というディレクトリがありますので、
これをImportすることになります。

※SDKのインストール先は、Window > Preferences の左側のAndroidを選択して、右側のSDK Locationで確認できる。

■2.利用するプロジェクトから参照させる。

次に、先ほどコピーしたディレクトリをライブラリーとして参照させます。 ここでかなりハマッタヨ(´;ω;`)ブワッ

Importをやってもなぜか次のようなエラーが大量に出てしまい進めなかったです。
android-support-v7-appcompat\res\values-v14\styles_base.xml:24: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.ActionBar'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:28: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionBar'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:32: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.ActionBar.Solid'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:36: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionBar.Solid'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:40: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionBar.Solid.Inverse'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:122: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.ActionButton'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:125: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionButton'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:129: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.ActionButton.CloseMode'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:133: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionButton.CloseMode'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:137: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.ActionButton.Overflow'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:141: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionButton.Overflow'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:44: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.ActionBar.TabBar'.
android-support-v7-appcompat\res\values-v14\styles_base.xml:48: error: Error retrieving parent for item: No resource found that matches the given name 'android:Widget.Holo.Light.ActionBar.TabBar'.
数時間ほど色々悩んだ結果、プロジェクトを作成する時に指定する、
Minimum Required SDK、Target SDK、Compile Withが問題な事に気づきましたハヶ━m9( ゚д゚)っ━ン!!

元々の設定では、次のように設定していました。
Minimum Required SDK API 8: Android 2.2 (Froyo)
Target SDK API 8: Android 2.2 (Froyo)
Compile With API 8: Android 2.2 (Froyo)
これだとうまく行かず、色々調べてみたら各項目の意味は次となっているようなので、
Minimum Required SDK
 動作する最低レベルのSDK
 ここで選択したバージョンより低いレベルのSDKではアプリがインストールできない状態になります
 APIの最低レベルがこのバージョンになる

Target SDK
 メインターゲットとする端末のSDKのバージョンを設定。
 Target SDKのバージョンより古いSDKでもアプリは動作します。

Compile With
 どのSDKのバージョンのコンパイラでビルドするかを指定
 Minimum Required SDK"や"Target SDK"と違い、すべてのバージョンのコンパイラは表示されません。
 コンパイラは新しいものほど改善が進んでいるため通常は最新のコンパイラを指定します。
いまいち、Target SDKが良く分からなかったですけど、
こちらの記事を読んだら多少わかりましたφ(゚Д゚ )フムフム…
Android:SDKバージョンについてなどから抜粋
★ターゲットにすべきバージョン
基本的に最新バージョンのSDKをターゲットにして、
つまり最新バージョンのライブラリを使用して開発すると問題ないはずです。
古いバージョンの端末に対応するにはAndroidManifest.xml中の
minSdkVersionを低く設定し、ソースコード内でそれぞれのバージョンに対応した
処理を記述します。
古いバージョンをターゲットにしてしまうと逆に新しいバージョン用のコードが
コンパイルできなくなってしまうためです。
minSdkVersionとターゲットのAPIレベルが異なると警告がでますが問題ありません。

Target SDKと、Compile Withを最新の形に変更したらうまく行きましたド━━━━m9(゚∀゚)━━━━ン!!

変更後
Minimum Required SDK: API 8: Android 2.2 (Froyo)
Target SDK API 8: API 17: Android 4.2 (Jelly Bean)
Compile With: API 19: Android 4.4
ちなみに次の設定でも問題ありませんでした!
Minimum Required SDK: API 8: Android 2.2 (Froyo)
Target SDK: API 8: Android 2.2 (Froyo)
Compile With: API 19: Android 4.4
ということは、Compile WithのAPI Levelが低いとダメってことですねc⌒っ゚д゚)っφ メモメモ...

上記の設定でプロジェクトを作成した後に下記の手順を行ってください!( ´∀`)bグッ!

Eclipseの「File」>「Import」で次の画面を開きます。

次に、「Android」 > 「Android Project from Existing Code」を選択して、「Next」を押します。

 Import Projects画面が開いたら、
「Browse...」を選択して、手順1で確認したSupport Library v7のappcompatディレクトリを選択し、
「Copy projects into workspace」にチェックしてから「Finish」を押します。

問題なく進むと、Package Explorerに、
「android-support-v7-appcompat」というプロジェクトが追加されます。
「android-support-v7-appcompat」を右クリックして、
「Properties」を選択します。
左の項目からAndroidを選択して、
右下にある「Is Library」が選択されている事を確認する。
■3.appcompatライブラリーの読み込み

このライブラリーを利用したいプロジェクトから参照させます。

参照させたいプロジェクトを右クリックして、
「Properties」を選択します。

開いた画面での左側にあるAndroidをクリックして、
右下にある「Add...」をクリックします。

一覧から「android-support-v7-appcompat」を選択して、「OK」を押します。
画面が戻ったら、正しく追加されている事を確認して「OK」を押します。
別のやり方としては、jarをそのままコピーするやり方があります。

手順1で確認したappcompatディレクトリの中にlibsがあり、
その中に「android-support-v4.jar」、「android-support-v7-appcompat.jar」があります。

このjarファイルを、利用するプロジェクトのlibsディレクトリにコピーします。
※既に「android-support-v4.jar」がある場合には、「android-support-v7-appcompat.jar」のみコピーする。
これだけ利用が可能になるみたいです(゚д゚)(。_。)(゚д゚)(。_。) ウンウン

注意点として、ActionBarを使う場合には、
次の2点を気をつける必要があります。

・ActivityはActionBarActivity を継承する。
※ActionBarActivityはFragmentActivityを継承している

・AppCompat のテーマを設定する
テーマは、styles.xmlのテーマを「Theme.AppCompat」にする必要がある。
それ以外のものが設定されていると次のようなエラーが発生してしまいます。
Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.
↓styles.xmlをこんな感じにする。
<resources>

    <!--
        Base application theme, dependent on API level. This theme is replaced
        by AppBaseTheme from res/values-vXX/styles.xml on newer devices.
    -->
    <style name="AppBaseTheme" parent="Theme.AppCompat.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>

</resources>

以上です(`・ω・´)ゞビシッ!!

参考URL

0 件のコメント:

コメントを投稿