回答の更新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と私のアプリのプロジェクトディレクトリは兄弟ディレクトリでした。
通常、 Android開発者向けドキュメント (および ActionBarSherlockテーマページ )にリンクされているように、マニフェストでテーマを設定します。 。
アプリ内のすべての場所でActionBarSherlockを使用する場合、これは機能します。
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/Theme.Sherlock">
私にとっては、これは@style/
プレフィックス。つまり持っていた
<style name="AppTheme" parent="Theme.Sherlock.Light" />
の代わりに
<style name="AppTheme" parent="@style/Theme.Sherlock.Light" />
デフォルトのテンプレート値は次のようなものだと誓うので、これはちょっと奇妙です:
<style name="AppTheme" parent="Android:Theme.Holo.Light" />
<!--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ファイルへのその他の依存関係(「提供」スコープ)は、コーディング中にシャーロッククラスへのリンクを実現するために使用されます。
同じ問題がありました。テーマはマニフェストに設定されていましたが、アプリはクラッシュしました。プログラムでテーマを設定することで問題が解決しました。
@Override
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
これはIntelliJ IDEAで起こっていました。この問題を解決するには、[ファイル]> [プロジェクト構造]> [プロジェクト設定]> [ファセット]> [2列目のactionbarsherlockモジュールを選択]> [ライブラリモジュール]チェックボックスをオンにします。
[〜#〜] update [〜#〜]さらにレビューした後、元の応答は具体的すぎる可能性があり、特定の場合にのみ機能する可能性があります。このエラーは、依存関係が適切にセットアップされていないことを意味します。 IntelliJ IDEAで、次の手順に従ってactionbarsherlockをモジュールの依存関係として適切に設定します。
これでうまくいくはずです。
カスタムスタイルを使用する場合は、カスタム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で生成されたすべてのリソースの名前を、テンプレートで使用される独自の規則に変更します。
これは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ファイルを詳しく調べました。テーマ全体をアプリケーション全体ではなく、メインアクティビティに指定するという間違いを犯していました!