ActionBar с поддержкой библиотеки и фрагментами содержимого фрагментов

Я добавил android-support-library-v7-appcompat в мой проект для поддержки ActionBar с уровня API 7 выше.

Он работает как шарм на android 4.0+, а также на Android 2.3 с нормальной Activity, которая имеет setContentView в onCreate, но когда активность загружается Фрагмент в 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();
    }
 }

Тема этого действия устанавливается в манифесте:

@стиль/Theme.AppCompat

Это результат на Android 2.3 (на 4.0+ показывает ActionBar) actionBar overlaping

Вы можете видеть, что первый элемент lisview перекрывает ActionBar (значок белого раунда и заголовок "Моя активность" )

Возможно, что я нашел ошибку в библиотеке поддержки, она выпущена только на 2 дня? Спасибо всем.

Ответы

Ответ 1

Edit: Теперь это официально зафиксировано и выпущено в Библиотеке поддержки v19.

Как указано в JJD ниже, вы можете использовать android.R.id.content с appcompat-v7 r.19.0.0 или новее. Кнопка дома также работает.

Другими словами: обходной путь ниже не нужен, если вы используете версию 19.0.0 или новее.


Я получил ответ на code.google.com. Я сделал резюме из frederic ответа:

Для предварительных устройств ICS вы должны использовать:

R.id.action_bar_activity_content

вместо

android.R.id.content

R.id.action_bar_activity_content - это новый идентификатор, используемый в макете для отображения содержимого приложения. Похоже, что он заменяет android.R.id.content при использовании поддержки v7 appcompat ActionBarActivity.

Вы можете использовать этот код для получения правильного идентификатора содержимого активности:

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;
}

Благодаря frederic

Ответ 2

Другой альтернативой, если вы не хотите изменять исходный код 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);

Ответ 3

Кажется, немного поздно внести свой вклад, но у меня была такая же проблема, и я не видел ответа здесь....

Проверьте файл styles.xml, может быть атрибут xml для наложения панели действий на true, т.е.

True

Вся запись выглядит примерно так:

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

Если это так, просто измените значение "windowActionBarOverlay" на false.

Ответ 4

Добавьте дополнительный пустой заголовок списка с размером панели действий. Должно быть хорошим обходным решением.