上記のAPIレベル7からActionBarをサポートするために、プロジェクトにAndroid-support-library-v7-appcompatを追加しました。
これは、Android 4.0+およびAndroid 2.3で、onCreateにsetContentViewを持つ通常のアクティビティを使用しますが、アクティビティがフラグメントをロードしている場合は、チャームのように機能しますonCreateで、ActionBarはレイアウトのコンテンツとオーバーラップします。他のすべてのシナリオでは、ActionBarは正常に機能します。
ここにいくつかのコードがあります:
class AssetsActivity extends ActionBarActivity{
@Override
protected void onCreate(Bundle arg0)
{
super.onCreate(arg0);
OpenLocalFragment assets = OpenLocalFragment.newInstance(index);
assets.setArguments(getIntent().getExtras());
getSupportFragmentManager().beginTransaction()
.add(Android.R.id.content, assets).commit();
}
}
このアクティビティのテーマは、マニフェストで次のように設定されています。
@ style/Theme.AppCompat
これはAndroid 2.3(4.0以降ではActionBarがうまく表示されます)の結果です
最初のlisviewアイテムがActionBarと重なっていることがわかります(白い丸いアイコンとタイトル「マイアクティビティ」)
サポートライブラリでバグを見つけた可能性がありますが、2日間しかリリースされていませんか?ありがとうございます。
編集:これは正式に修正され、サポートライブラリv19でリリースされました。
JJDが以下にコメントしているように、通常Android.R.id.contentをappcompat-v7 r.19.0.0または新しい。ホームボタンも機能します。
言い換えると、バージョン19.0.0以降を使用している場合、以下の回避策は不要です。
code.google.com で答えを得ました。私はフレデリックの答えから要約を作りました:
Pre ICSデバイスの場合、使用する必要があります:
R.id.action_bar_activity_content
の代わりに
Android.R.id.content
R.id.action_bar_activity_contentは、アプリコンテンツを表示するためのレイアウトで使用される新しいIDです。サポートv7 appcompat ActionBarActivityを使用すると、Android.R.id.contentが置き換えられるように見えます。
このコードを使用して、アクティビティコンテンツの正しいIDを取得できます。
public static int getContentViewCompat() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH ?
Android.R.id.content : R.id.action_bar_activity_content;
}
フレデリックのおかげで
貢献するのが少し遅れているようですが、私は同じ問題を抱えていて、ここで答えを見ていません。
Styles.xmlファイルを確認してください。trueに設定されたアクションバーをオーバーレイするためのxml属性がある可能性があります。
true
エントリ全体は次のようになります
<item name ="actionBarTabTextStyle" > @style/TabTextStyle</item>
<item name = "windowActionBarOverlay">true</item>
その場合は、「windowActionBarOverlay」の値をfalseに変更するだけです。
Android-support-library-v7-appcompatのソースコードを変更したくない場合の別の方法は、次のような空のレイアウトをレイアウトxmlファイルに追加することです。
<LinearLayout
Android:id="@+id/content_view"
Android:orientation="vertical"
Android:layout_width="match_parent"
Android:layout_height="match_parent"/>
代わりに、フラグメント呼び出しを行ってそのレイアウトに追加します。
ft.add(R.id.content_view, mFragment, mTag);
アクションバーのサイズで空のリストヘッダーを追加します。良い回避策になるはずです。