#android #android-layout #android-actionbar #transition #android-immersive
Вопрос:
Запрос клиента:
Я хочу создать плавный переход между всеми действиями, переместив 2 элемента png моего фона (запрос клиента). Подробно: у меня есть правый элемент, который должен переместиться влево на 20 секунд, и элемент miror слева, который должен переместиться вправо.
Мой текущий код:
Переход выглядит хорошо, для этого я создал 2 общих элемента с одним и тем же «Именем перехода» во всем макете моей деятельности:
android:transitionName="transitionLeft"
В своем манифесте я задал свой собственный стиль:
<application
android:allowBackup="true"
android:fullBackupContent="@xml/backup_descriptor"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
В моем «res/values/style.xml» Я установил windowsContentTransitions в значение true:
<!-- Activity theme -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowContentTransitions">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
</style>
И, безусловно, во всей моей деятельности в начале onCreate() Я добавил:
getWindow().requestFeature(Window.FEATURE_CONTENT_TRANSITIONS);
Во всех действиях на onWindowFocusChanged() Я установил SYSTEM_UI_FLAG_FULLSCREEN:
@Override
public void onWindowFocusChanged(boolean hasFocus) {
super.onWindowFocusChanged(hasFocus);
if (hasFocus) {
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
// Hide the nav bar and status bar
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
}
}
Моя проблема:
Когда я открываю действие, переход уже запущен, но я всегда видел кратковременное исчезновение в строке инструментов и заголовка, и я не хочу, чтобы оно было. Но, на мой взгляд, я сделал все, чтобы уже скрыть эти полосы, но это не сработает нормально.
Ответ №1:
Я нахожу решение: Проблема связана с моим приложением, которое находится в полноэкранном режиме. Поэтому, чтобы заблокировать статус и навигационную панель, вы должны установить DecorView.setSystemVisibility в SYSTEM_UI_FLAG_IMMERSIVE_STICKY в начале onCreate, например:
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
| View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN);
С этим я больше никогда не увижу навигацию и строку состояния