#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? Я также добавлю немного своего манифеста в свой пост для большего контекста