42

回答については、以下の更新 2 をお読みください。

アプリで ActionBarSherlock を使用しようとしています。プロジェクト 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').

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

1)プロジェクトのディレクトリからlibrary-4.0.0.jarandを削除しました。android-support-4.0.jarlib

2) 次に、librarygithub からチェックアウトした ActionBarSherlock ディレクトリのルート内のフォルダーに移動します。そのandroid update projectように入力するbuild.xmlproguard.cfg、ライブラリ用のファイルが作成されます。

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

4

7 に答える 7

75

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

アプリ内のどこでも ActionBarSherlock を使用したい場合、これは機能します:

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/Theme.Sherlock">
于 2012-03-18T11:10:53.463 に答える
19

私にとって、これは@style/プレフィックスを使用しなかったことが原因でした。つまり、私は持っていた

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

それ以外の

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

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

<style name="AppTheme" parent="android:Theme.Holo.Light" />
于 2012-11-01T15:18:37.863 に答える
3
<!--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 ファイル (スコープ「提供」) へのその他の依存関係は、コーディング中に sherlock クラスへのリンクを実現するために使用されます。

于 2012-07-30T16:50:38.460 に答える
1

これはIntelliJ IDEAで私に起こっていました。File > Project Structure > Project Settings > Facets > Select actionbarsherlock module in 2 column > Select the "Library module" check box > Apply and OK > Save and Rebuild.

更新さらに検討した結果、私の最初の回答は具体的すぎる可能性があり、おそらく特定の場合にのみ機能します。このエラーは、依存関係が正しく設定されていないことを意味します。IntelliJ IDEA で、次の手順に従って、モジュールの依存関係として actionbarsherlock を適切にセットアップします。

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

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

于 2013-07-24T12:16:18.777 に答える
1

カスタム スタイルを使用する場合は、カスタム 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 で生成されたすべてのリソースの名前を、テンプレートで使用される独自の規則に変更します。

于 2013-01-16T19:31:28.367 に答える
0

これは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 ファイルを詳しく調べました。アプリケーション全体ではなく、メイン アクティビティのテーマを指定するという間違いを犯しました。

于 2013-09-01T23:07:30.937 に答える