17

ナビゲーションオプションとしてタブを備えたアクションバーを実装しようとしています。これを行うには、以下に示すように、[新しいAndroidアプリ]ウィザードの[新しい空白のアクティビティ]セクションで[タブ+スワイプ]オプションを選択します。

タブ+スワイプウィザードオプション

さて、アンドロイドマニフェストでは、いつ

android:targetSdkVersion="15"

これはデフォルト値であり、Nexus 7 / Nexus 7エミュレーターではアクションバーは次のようになります。これは、アプリの望ましい外観です。

デフォルトの動作

Androidマニフェストのその行を次のように変更すると

android:targetSdkVersion="16"

アクションバーの外観がこれに変わります

android:targetSdkVersion=後の動作

デフォルトの外観はAndroidのどのバージョンでもそのままですが、16ですが、targetSdkVersionが16に設定されているときに、アクションバーの外観が突然変わる理由を誰かに説明できますか?

上記は、エミュレーターと実際のネクサス7で再現可能です。

フルスクリーングラブ

通常: http: //i.stack.imgur.com/VsBA2.png

android:targetSdkVersion = "16"の後:http: //i.stack.imgur.com/OM6Y4.png

更新-2013年3月10日:(タブではなく)リストナビゲーションモードに切り替えて、android:targetSdkVersion=17への移動を有効にしました

4

1 に答える 1

14

targetSDKを16に設定すると変更されるのは、GoogleがJellyBeanでのタブの測定方法を変更したためです。具体的には、これを見てくださいandroid.internal.view.ActionBarPolicy

public boolean hasEmbeddedTabs() {
    final int targetSdk = mContext.getApplicationInfo().targetSdkVersion;
    if (targetSdk >= Build.VERSION_CODES.JELLY_BEAN) {
        return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs);
    }

    // The embedded tabs policy changed in Jellybean; give older apps the old policy
    // so they get what they expect.
    return mContext.getResources().getBoolean(R.bool.action_bar_embed_tabs_pre_jb);
}

ただし、理由だけでなく、解決策も必要だと思います。残念ながら、埋め込みのみに設定する簡単な方法を提供することはできません。

ただし、 ActionBarSherlockを使用して一貫性を保つことをお勧めします。そのボーナスは、古いデバイスでアクションバーを使用できることです。使用時(ポートレート)、targetSDKを16に設定すると、ゼリービーンズ、アイスクリームサンドイッチ、ジンジャーブレッド、フローズンヨーグルトのスタックレイアウトを使用していることが確認できます。少なくとも、何を期待するかを知りながら、レイアウトを設計することができます。

ほとんどの場合、横向きモードに切り替えると、測定方法に「十分なスペース」があるため、アクションバーに再び埋め込まれることに注意してください。

于 2012-10-17T21:51:37.853 に答える