Можно ли использовать разные цвета строки состояния на экране заставки по сравнению с основным приложением в приложении для Android?

#android #react-native

#Android #реагировать-родной

Вопрос:

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

Прямо сейчас мои файлы настроены следующим образом:

values/colors.xml

 lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?gt; lt;resourcesgt;  lt;color name="splashscreen_background"gt;#000000lt;/colorgt;  lt;color name="iconBackground"gt;#000000lt;/colorgt;  lt;color name="colorPrimary"gt;#FFFFFFlt;/colorgt;  lt;color name="colorPrimaryDark"gt;#000000lt;/colorgt; lt;/resourcesgt;  

values-nights/colors.xml

 lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?gt; lt;resourcesgt;  lt;color name="splashscreen_background"gt;#000000lt;/colorgt;  lt;color name="iconBackground"gt;#000000lt;/colorgt;  lt;color name="colorPrimary"gt;#000000lt;/colorgt;  lt;color name="colorPrimaryDark"gt;#000000lt;/colorgt; lt;/resourcesgt;  

values/styles.xml

 lt;?xml version="1.0" encoding="UTF-8" standalone="yes"?gt; lt;resources xmlns:tools="http://schemas.android.com/tools"gt;  lt;style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"gt;  lt;item name="android:textColor"gt;@android:color/blacklt;/itemgt;  lt;item name="android:editTextStyle"gt;@style/ResetEditTextlt;/itemgt;  lt;item name="colorPrimary"gt;@color/colorPrimarylt;/itemgt;  lt;item name="colorPrimaryDark"gt;@color/colorPrimarylt;/itemgt;  lt;/stylegt;  lt;style name="ResetEditText" parent="@android:style/Widget.EditText"gt;  lt;item name="android:padding"gt;0dplt;/itemgt;  lt;item name="android:textColorHint"gt;#c8c8c8lt;/itemgt;  lt;item name="android:textColor"gt;@android:color/blacklt;/itemgt;  lt;/stylegt;  lt;style name="SplashScreen" parent="AppTheme"gt;  lt;item name="android:windowBackground"gt;@drawable/splashscreenlt;/itemgt;  lt;item name="colorPrimaryDark"gt;@color/colorPrimaryDarklt;/itemgt;  lt;/stylegt; lt;/resourcesgt;  

AndroidManifest.xml (только соответствующий раздел)

 lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.package.packagename"gt;  lt;application  android:name=".MainApplication"  android:label="@string/app_name"  android:icon="@mipmap/ic_launcher"  android:roundIcon="@mipmap/ic_launcher_round"  android:allowBackup="true"  android:theme="@style/AppTheme"  android:usesCleartextTraffic="true"  lt;activity  android:name=".MainActivity"  android:label="@string/app_name"  android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"  android:launchMode="singleTask"  android:windowSoftInputMode="adjustResize"  android:theme="@style/SplashScreen"  android:screenOrientation="portrait"  gt;  lt;intent-filtergt;  lt;action android:name="android.intent.action.MAIN"/gt;  lt;category android:name="android.intent.category.LAUNCHER"/gt;  lt;/intent-filtergt;  ...  

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

Ответ №1:

Вы можете программно изменить цвет строки состояния в своем методе всплеска onCreate() или фрагмента onViewCreated() .

Вот java-код для динамического изменения цвета строки состояния :

 if (Build.VERSION.SDK_INT gt;= 21) {  int currentNightMode = getResources().getConfiguration().uiMode amp; Configuration.UI_MODE_NIGHT_MASK;   if (currentNightMode == Configuration.UI_MODE_NIGHT_YES) {   final Window window = getWindow();  getWindow().getDecorView().setSystemUiVisibility(0);  window.setStatusBarColor(getResources().getColor(R.color.SPLASH_BLACK));   } else if (currentNightMode == Configuration.UI_MODE_NIGHT_NO) {  getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);  getWindow().setStatusBarColor(getResources().getColor(R.color.MAIN_WHITE));  }   }  

И вы можете добавить эти строки в тему вашего приложения в styles.xml файле :

 lt;item name="android:windowLightStatusBar" tools:targetApi="m"gt;truelt;/itemgt; lt;item name="android:navigationBarColor" tools:targetApi="lollipop"gt;@color/nav_bar_colorlt;/itemgt;  

Комментарии:

1. Разве это невозможно сделать исключительно с помощью файлов стилей и цветов? Я также использую React Native, поэтому я не уверен, какими будут эквивалентные изменения

2. @Джонни, Да, ты можешь. вы должны определить две отдельные темы. один для заставки, а другой для остальных экранов приложений. вы можете определить темы в своем styles.xml файле. затем manifest.xml используйте тему заставки для своей активности в заставке и используйте основную тему для темы по умолчанию вашего приложения.

3. Хм, разве это не так уже настроено, с отдельным стилем всплеска в styles.xml? Я также добавлю немного своего манифеста в свой пост для большего контекста