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
Добавьте дополнительный пустой заголовок списка с размером панели действий. Должно быть хорошим обходным решением.