web-dev-qa-db-ja.com

サポートライブラリとフラグメントオーバーレイコンテンツを備えたActionBar

上記の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がうまく表示されます)の結果です actionBar overlaping

最初のlisviewアイテムがActionBarと重なっていることがわかります(白い丸いアイコンとタイトル「マイアクティビティ」)

サポートライブラリでバグを見つけた可能性がありますが、2日間しかリリースされていませんか?ありがとうございます。

16
Primoz990

編集:これは正式に修正され、サポートライブラリv19でリリースされました。

JJDが以下にコメントしているように、通常Android.R.id.contentappcompat-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;
}

フレデリックのおかげで

18
Primoz990

貢献するのが少し遅れているようですが、私は同じ問題を抱えていて、ここで答えを見ていません。

Styles.xmlファイルを確認してください。trueに設定されたアクションバーをオーバーレイするためのxml属性がある可能性があります。

true

エントリ全体は次のようになります

    <item name ="actionBarTabTextStyle" > @style/TabTextStyle</item>
    <item name = "windowActionBarOverlay">true</item>

その場合は、「windowActionBarOverlay」の値をfalseに変更するだけです。

1
JackJin

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);
1
doubleristretto

アクションバーのサイズで空のリストヘッダーを追加します。良い回避策になるはずです。

0
vork