12

Android (2.1 > 3.1) 用のアプリを作成しています。Honeycomb アプリでアプリ アイコンを使用してホーム アクティビティに移動するというおなじみの方法を使用したいと思いますが、以前の非 Honeycomb デバイスでアクティビティを実行すると、どこで Activity.getActionBar(); メソッドがまだ存在しない場合、アプリは強制終了します。デバイスがハニカムを実行している場合に、この指定されたコードのみを実行するにはどうすればよいですか?

@Override
protected void onStart() {
    super.onStart();
    ActionBar actionBar = this.getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
}

助けてくれてありがとう、そして素晴らしい一日を。

4

7 に答える 7

67

3.0 より前のアクティビティをアクション バー デザイン パターンのカスタム実装で自動的にラップする Android 用のライブラリを作成しました。getSupportActionBar()次に、アプリケーションが実行されている Android のバージョンに応じて、ネイティブ実装とカスタム実装の両方に共通のインターフェイスを提供する を呼び出すことができます。

このライブラリでは、単一のテーマを使用して、これらの両方のアクション バーにカスタム スタイルを適用することもできます。

詳細については、 actionbarsherlock.comでサンプル アプリケーションのスクリーンショットをご覧ください。

このライブラリは 100% オープン ソースであり、github.com/JakeWharton/ActionBarSherlockで入手できます。

于 2011-07-11T12:08:24.417 に答える
12

Android pre-Honeycomb には ActionBar がないため、actionBar に関するメソッドはすべて失敗します。Honeycomb と pre-Honeycomb の両方に ActionBar を使用するGoogle IO app のコードを見てください。

簡単に言えば、それ自体では機能しないため、独自の ActionBar コードを含める必要があります。

于 2011-07-11T05:41:20.830 に答える
4

アクションバーの API ガイドには次のように書かれています。

アクション バー互換性サンプル アプリは、アプリが一部の ActionBar API を使用できるようにする API レイヤーとアクション バー レイアウトを提供し、従来のタイトル バーをカスタム アクション バー レイアウトに置き換えることで古いバージョンの Android もサポートします。

これは、Android 4.1 (API 16) サンプルをインストールすることで取得できます。

次にEclipseで:

  1. [ファイル] > [新規] > [プロジェクト] に移動します
  2. Android > Android サンプル プロジェクト
  3. Android 4.1 を確認する
  4. ActionBarCompat を選択
于 2012-07-25T05:23:04.573 に答える
3

私は GreenDroids アクションバーを使用するのが好きです (さらに、他にもいくつかのかわいいものが含まれています): http://android.cyrilmottier.com/?p=240

于 2011-07-11T05:55:09.307 に答える
3

ハニカム前にはアクションバーが存在しないため、何か他のものを用意する必要があります。1 つの提案は、github にある johannilssons アクションバー ライブラリを使用することです。直接リンク: https://github.com/johannilsson/android-actionbar

于 2011-07-11T05:48:05.260 に答える
3

リビジョン 18 の時点で、Android サポート ライブラリには API レベル 7 までの ActionBar サポートが含まれています。これは現在、2.1 以降の Android のすべてのバージョンで ActionBar をサポートするための推奨される方法であり、サードパーティのライブラリや他のハックよりもはるかに使いやすいです。

于 2013-08-28T01:45:51.073 に答える
2

コードは自明だと思います

private static int sdkVersion;
 static 
 {
    try {
      sdkVersion = Integer.parseInt(android.os.Build.VERSION.SDK);
    } catch (Exception ex) {
    }
  }

  /** Device support the froyo (Android 2.2) APIs */
  public static boolean isAndroid22() {
    return sdkVersion >= 8;
  }

  /** Device support the Gingerbread (Android 2.3) APIs */
  public static boolean isAndroid23() {
    return sdkVersion >= 9;
  }

  /** Device supports the Honeycomb (Android 3.0) APIs */
  public static boolean isAndroid30() {
    return sdkVersion >= 11;
  }
于 2011-07-11T05:47:01.720 に答える