У меня есть ViewPager и FragmentPagerAdapter, созданный в одном действии с тремя фрагментами. Все фрагменты загружаются одновременно и хранятся в памяти с помощьюСделать фрагменты на весь экран программно
mPager.setOffscreenPageLimit(2);
Один из этих фрагментов хостов камеры предварительного просмотра, что я хотел бы, чтобы весь экран, без строки состояния или панели действий. Остальные фрагменты требуют отображения панели действий.
Как я могу сделать только фрагмент предварительного просмотра камеры во весь экран, сохранив при этом два других фрагмента? Я пробовал использовать темы, что означает разрыв панели действий.
Программным вызова следующее не помогает, потому что она заставляет всю деятельность, чтобы быть полный экран (и, таким образом, остальные два фрагмента вместе с ним):
requestWindowFeature(Window.FEATURE_NO_TITLE);
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.main);
Я также попытался реализации ViewPager.OnPageChangeListener:
public void onPageSelected(int position) {
if(position == 1)
getActionBar().hide();
else
getActionBar().show();
}
Это делает скрыть панель действий, но он не скрывает строку состояния системы (я говорю о том, где уведомлений, значки состояния, и времени), а действие бар скрыть/показать анимацию также очень изменчив при прохождении.
Для примера того, что я хочу сделать точно, см. Snapchat - им удастся полностью очистить прокрутку между камерой и другими фрагментами.
Edit:
Так что я изменил мой onPageSelected к этому:
public void onPageSelected(int position) {
if(position == 1) {
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
} else {
MainActivity.this.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
MainActivity.this.getWindow().addFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);
}
}
Это позволяет мне изменить, отображается ли в строке состояния или нет. Тем не менее, это вызывает большое количество битков. Такая же проблема с панелью действий.
Я заметил, что в Snapchat строка состояния скользит вверх и вниз после завершения изменения вкладок. Я не уверен, как это реализовать, поэтому любые советы по этому аспекту будут оценены.
Я попробовал модифицированную версию этого, что помогает устранить строку состояния, но она отстает от сумасшедшего –
Кроме того, я просто понял, что это может вызвать сбои приложений, если фрагмент был выгружен из памяти из-за страницы салфетки или если они когда-либо были уничтожены и воссозданы, например, от изменения ориентации. Вам нужно будет получить ссылку на фрагмент с помощью findFragmentById(), так как старая ссылка будет недействительной –
что такое 'mActionBar'? –