web-dev-qa-db-ja.com

Android appのActionBarSherlockテーマを設定

回答の更新2を読む

アプリでActionBarSherlockを使用しようとしています。 project github repo から4.0.0リリースをチェックアウトし、Netbeansでビルドしてから、library-4.0.0.jarファイルをプロジェクトのlibディレクトリにコピーしました(Eclipseを使用していません) 。

現在はスケルトンアクティビティにすぎず、ICSで正常に起動しますが、Gingerbreadで実行すると、Theme.Sherlock(または同様の)にアプリのテーマがないことを訴える次の例外が発生します。

_Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.arashpayan.prayerbook/com.arashpayan.prayerbook.PrayerBook}: Java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1647)
    at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1663)
    at Android.app.ActivityThread.access$1500(ActivityThread.Java:117)
    at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:931)
    at Android.os.Handler.dispatchMessage(Handler.Java:99)
    at Android.os.Looper.loop(Looper.Java:130)
    at Android.app.ActivityThread.main(ActivityThread.Java:3683)
    at Java.lang.reflect.Method.invokeNative(Native Method)
    at Java.lang.reflect.Method.invoke(Method.Java:507)
    at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:839)
    at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:597)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: Java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.generateLayout(ActionBarSherlockCompat.Java:987)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.installDecor(ActionBarSherlockCompat.Java:899)
    at com.actionbarsherlock.internal.ActionBarSherlockCompat.setContentView(ActionBarSherlockCompat.Java:852)
    at com.actionbarsherlock.ActionBarSherlock.setContentView(ActionBarSherlock.Java:655)
    at com.actionbarsherlock.app.SherlockFragmentActivity.setContentView(SherlockFragmentActivity.Java:316)
    at com.arashpayan.prayerbook.PrayerBook.onCreate(PrayerBook.Java:44)
    at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1047)
    at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1611)
    ... 11 more
_

文句を言う(PrayerBook:44)はsetContentViewの呼び出しです。このアプリは、onCreate()メソッドを備えた単一のアクティビティで構成されています。このメソッドは、上部からsetTheme()を呼び出します。

_public void onCreate(Bundle savedInstanceState)
{
        setTheme(com.actionbarsherlock.R.style.Theme_Sherlock);
        super.onCreate(savedInstanceState);

        TextView rootTextView = new TextView(this);
        rootTextView.setText("Hello, world!");
        setContentView(rootTextView);

        getSupportActionBar().setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
        ActionBar.Tab tab = getSupportActionBar().newTab();
        tab.setText("Prayers");
        getSupportActionBar().addTab(tab);

        tab = getSupportActionBar().newTab();
        tab.setText("Recents");
        getSupportActionBar().addTab(tab);

        tab = getSupportActionBar().newTab();
        tab.setText("Bookmarks");
        getSupportActionBar().addTab(tab);
}
_

テーマを間違って設定する必要がありますが、どうすればいいかわかりません。誰でも助けることができますか?

更新 以下では、CommonsWareはAndroidManifest.xmlでテーマを設定できることに注意しました。私はそれを次のように試しました:

_<application Android:label="@string/app_name" Android:icon="@drawable/icon" Android:theme="@style/Theme.Sherlock">
        <activity Android:name="PrayerBook"
                  Android:label="@string/app_name"
                  Android:configChanges="orientation|keyboardHidden|screenLayout|uiMode|mcc|mnc|locale|navigation|fontScale|screenSize">
            <intent-filter>
                <action Android:name="Android.intent.action.MAIN" />
                <category Android:name="Android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            Android:name="LanguagesActivity" />
</application>
_

しかし、Antがアプリをビルドしようとするとエラーが表示されます。

_/Users/arash/coding/prayerbook/AndroidManifest.xml:7: error: Error: No resource found that matches the given name (at 'theme' with value '@style/Theme.Sherlock').
_

UPDATE 2フォローアップコメントでCommonsWareの助けを借りて、機能させることができました。プロジェクトの依存関係としてActionBarSherlockを追加する必要がありました。そうするには、

1)プロジェクトのlibディレクトリから_library-4.0.0.jar_と_Android-support-4.0.jar_を削除しました。

2)次に、githubからチェックアウトされたActionBarSherlockディレクトリのルート内のlibraryフォルダーに移動します。 _Android update project_と入力すると、ライブラリ用に_build.xml_および_proguard.cfg_ファイルが作成されます。

3)最後に、cdをメインプロジェクトディレクトリに戻し、ABSをライブラリの依存関係として_Android update project --path . --library ../ActionBarSherlock/library_で追加します。コマンド内の_--library_へのパスは、チェックアウトした場所によって異なりますレポ。 ActionBarSherlockと私のアプリのプロジェクトディレクトリは兄弟ディレクトリでした。

42
Arash Payan

通常、 Android開発者向けドキュメント (および ActionBarSherlockテーマページ )にリンクされているように、マニフェストでテーマを設定します。 。

アプリ内のすべての場所でActionBarSherlockを使用する場合、これは機能します。

<application
    Android:icon="@drawable/ic_launcher"
    Android:label="@string/app_name"
    Android:theme="@style/Theme.Sherlock">
75
CommonsWare

私にとっては、これは@style/プレフィックス。つまり持っていた

<style name="AppTheme" parent="Theme.Sherlock.Light" />

の代わりに

<style name="AppTheme" parent="@style/Theme.Sherlock.Light" />

デフォルトのテンプレート値は次のようなものだと誓うので、これはちょっと奇妙です:

<style name="AppTheme" parent="Android:Theme.Holo.Light" />
19
Timmmm
<!--Provides resources-->
<dependency>
   <groupId>com.actionbarsherlock</groupId>
   <artifactId>library</artifactId>
   <version>4.1.0</version>
   <type>apklib</type>
</dependency>
<!-Provides import links-->
<dependency>
   <groupId>com.actionbarsherlock</groupId>
   <artifactId>library</artifactId>
   <version>4.1.0</version>
   <type>jar</type>
   <scope>provided</scope>
 </dependency>

ヒントは、タイプ "apklib"を使用することです。つまり、Mavenはすべてのソース(リソースも)を使用します。 jarファイルへのその他の依存関係(「提供」スコープ)は、コーディング中にシャーロッククラスへのリンクを実現するために使用されます。

3
Apple.Dragon

同じ問題がありました。テーマはマニフェストに設定されていましたが、アプリはクラッシュしました。プログラムでテーマを設定することで問題が解決しました。

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme);
    super.onCreate(savedInstanceState);
1
Apfelsaft

これはIntelliJ IDEAで起こっていました。この問題を解決するには、[ファイル]> [プロジェクト構造]> [プロジェクト設定]> [ファセット]> [2列目のactionbarsherlockモジュールを選択]> [ライブラリモジュール]チェックボックスをオンにします。

[〜#〜] update [〜#〜]さらにレビューした後、元の応答は具体的すぎる可能性があり、特定の場合にのみ機能する可能性があります。このエラーは、依存関係が適切にセットアップされていないことを意味します。 IntelliJ IDEAで、次の手順に従ってactionbarsherlockをモジュールの依存関係として適切に設定します。

  1. Zipからactionbarsherlockライブラリをダウンロードして抽出します(注:「actionbarsherlock」フォルダーのみが必要です)
  2. Androidプロジェクトと一緒にコピーして貼り付けます
  3. IntelliJでプロジェクトを開きます
  4. ファイル>プロジェクト構造>プロジェクト設定>モジュール>追加(2列目の上の緑の「+」)>モジュールのインポート>ファイルブラウザダイアログでactionbarsherlockディレクトリを選択> OK>既存のソースからモジュールを作成>次へ
  5. プロジェクトに追加されないように「テスト」フォルダーのチェックを外し、「次へ」をクリックします
  6. [ライブラリ]タブで、Android-support-v4をオンにし、[次へ]をクリックします
  7. [モジュール]タブで、actionbarsherlockをオンにし、[次へ]をクリックします
  8. Actionbarsherlock.imlを上書きするように要求された場合、「上書き」を選択してから「完了」を選択します(プロジェクト構造ダイアログの「モジュール」セクションに戻る必要があります)
  9. 2列目からactionbarsherlockモジュールを選択し、3列目の[依存関係]タブで、Android-support-v4ライブラリの横にある[エクスポート]をオンにします
  10. もうすぐ!
  11. 次に、2番目の列からプロジェクトモジュールを選択し、[依存関係]タブで[追加]ボタン(ダイアログの右端にある緑色の「+」)をクリックします。
  12. [モジュールの依存関係]を選択し、表示されるダイアログからactionbarsherlockを選択して[OK]を押します
  13. 「適用」または「OK」をクリックして、変更を受け入れます

これでうまくいくはずです。

1
kahmali

カスタムスタイルを使用する場合は、カスタムActionBarSherlockスタイルのテンプレートを作成しました。テーマは/values/styles.xmlファイルで定義されています。 Theme.Sherlock.Lightテーマから拡張されています。設定できるパラメーターは多数あり、アイコン、ロゴ、ディバイダー、タイトル、シャドウオーバーレイ、アクションメニューボタン、ポップアップメニュー、アクションモードの背景、ドロップダウンリストナビゲーション、タブスタイル、表示オプションなどカスタムアクションバーのテーマを作成するために必要なものはほぼすべてです。アクションバーのスタイルを非常にすばやく設定できるので、このテンプレートをアプリで使用します。

このテンプレートは、私の GitHub にあります。使い方はとても簡単です。値と描画可能なディレクトリをプロジェクトにコピーし、 AndroidManifest.xml のapplication要素でAndroid:themeパラメーターを設定するだけです。

<application
    ...
    Android:theme="@style/Theme.Example">

テンプレート内のドロウアブルは Android Action Bar Style Generator を介して生成されました。リソースに異なる命名規則を使用しています。 この単純なスクリプト は、Android Action Bar Style Generatorで生成されたすべてのリソースの名前を、テンプレートで使用される独自の規則に変更します。

1
petrnohejl

これはOPの質問に対する答えではありませんが、彼が言及したのと同じ例外をどのようにして得たのかを説明します。

    Java.lang.RuntimeException: Unable to start activity
    ComponentInfo{com.Merlinia.MMessaging_Test/com.Merlinia.MMessaging_Test.TestObjectsActivity}: 
    Java.lang.IllegalStateException: You must use Theme.Sherlock, Theme.Sherlock.Light, Theme.Sherlock.Light.DarkActionBar, or a derivative.

私の場合、解決策は非常に簡単でしたが、見つけるのに時間がかかりすぎました。この例外について読むすべての内容は、「manifest.xmlファイルでテーマを指定したことを確認してください」と書かれているため、manifest.xmlファイルをざっと見てみました。それで、他のいろいろなことを試しました。

最後に、manifest.xmlファイルを詳しく調べました。テーマ全体をアプリケーション全体ではなく、メインアクティビティに指定するという間違いを犯していました!

0
RenniePet