Как скрыть строку заголовка во время загрузки приложения и показать его при завершении загрузки?

У меня есть приложение, которое использует настраиваемую строку заголовка. Однако, когда мое приложение запускается, я заметил, что строка заголовка по умолчанию отображается в течение короткого периода времени. Моя проблема в том, что я не хочу показывать строку заголовка по умолчанию во время загрузки моего приложения. Как скрыть строку заголовка во время загрузки моего приложения, чтобы не было намека на это, а затем показать его потом?

До сих пор я пробовал следующие решения, но никто не работал:

  • Скрыть строку заголовка в XML, а затем установить настраиваемую строку заголовка в коде. (Проблема: я получил сообщение об ошибке: «Вы не можете комбинировать собственные заголовки с другими функциями заголовка».)

В XML:

<item name="android:windowNoTitle">true</item> 

В методе onCreate:

 requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); //... some code goes here getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_header); 
  • Задайте размер строки заголовка в XML равным 0. Затем измените его размер через код позже. (Проблема: я не знаю, как установить размер строки заголовка в коде. Возможно ли это? Я попробовал getWindow (). SetAttributes () и getWindow (). SetLayout (), но оба они не работали. )»

В XML:

 <item name="android:windowTitleSize">30dp</item> 
  • Измените windowTitleBackgroundStyle и установите прозрачность в качестве фона. (Проблема: содержимое заголовка стало невидимым, но строка под заголовком все еще видна.)

В XML:

 <!-- style used by windowTitleBackgroundStyle --> <item name="android:background">@drawable/transparent</item> 

Некоторые объяснения того, с чем вы столкнулись, надеюсь, они помогут вам в том направлении, в котором вы довольны.

Вы уже видели, что ваша тема используется для создания того, что вы видите во время загрузки. Что происходит, так это то, что система создает временное / загрузочное окно на основе темы вашего действия, как указано в манифесте, пока ваш процесс все еще запущен. Возможно, ваш код еще не запущен, а ваше собственное действие будет иметь другое окно. Это важно, потому что ряд настроек блокируется, когда декор окна был создан, но у вас на самом деле есть два шанса. Окно, которое использует ваша деятельность, еще не создано, когда вы видите это состояние загрузки.

Настройка заголовка в вашей теме не работает, потому что она сопоставляется с функцией Window.FEATURE_NO_TITLE . Это доминирует над любыми другими функциями окна заголовка, которые вы можете запросить, и как только функция запрашивается, вы не можете отменить запрос или удалить его независимо от того, был ли декор еще инициализирован.

Как часть вашей темы, размер заголовка дает вам предсказуемые проблемы. Атрибуты темы не могут быть изменены. Тем не менее, какая тема, которую использует ваша деятельность, может быть изменена до того, как ваш декор окон будет инициализирован. Вы можете указать одну тему в манифесте для активности, которая будет использоваться во время загрузки, и поменять ее, используя setTheme в вашей деятельности. (Лучшее место, вероятно, в onCreate перед setContentView, где в противном случае вы запрашивали бы функции окна.)

Скорее всего, строка под заголовком, которую вы видите, – это android:windowContentOverlayandroid:windowContentOverlay используется для подачи тени из заголовка над содержимым. На большинстве устройств верхний край этой тени, вероятно, будет отображаться как строка под областью заголовка. Вы можете установить это на @null чтобы полностью избавиться от тени, если хотите.

В моем манифесте я сделал следующее в своем теге «application».

 android:theme="@android:style/Theme.NoTitleBar" 

И затем, для каждого действия, я добавил

 android:theme="@style/CustomTheme" 

Вы можете попытаться открыть приложение в полноэкранном режиме. Тогда при загрузке приложения вы можете выйти из полноэкранного режима. Таким образом, ваша строка заголовка не будет видна в полноэкранном режиме. Это работает в html.не уверен, если вы можете использовать этот трюк.