Intereting Posts
Что такое «приемник» в Котлине? Прокрутка не работает во второй активности Преобразование наблюдаемого в текущее с противодавлением в RxJava2 Присвоение свойств объекту javascript с использованием динамических имен свойств Kotlin 0.11.91 Unresolved Reference: inv () Не удалось выполнить синхронизацию проекта с градиентом. Основные функции не будут работать должным образом в Android-студии 3.0 Аннотирование генерируемой нулевой высоты источника (для Kotlin) Конструктор супертипов объекта Котлин Файл spring-configuration-metadata.json не генерируется в IntelliJ Idea для класса Kotlin @ConfigurationProperties Почему .map в mutableList фактически не изменяет значения внутри List в Kotlin? как сделать ссылку с URL-адресами в TextView на андроид без использования java Как долго свойство String может находиться в Котлине? Override getter для класса данных Kotlin Многострочный макет регулярного выражения Можно ли смешивать Ktor с Exposed?

Statusbar не прозрачен, но белый

Чтобы проверить kotlin с anko DSL, я решил запустить новый proyect в последней Android-студии ide (2.1.3), используя плагин kotlin (1.0.3) и последнюю библиотеку anko (0.9)

Я использовал функцию «Активность ящика навигации по умолчанию», поэтому мне просто пришлось преобразовать основной xml в anko.

Это xml:

<?xml version="1.0" encoding="utf-8"?> <android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/drawer_layout" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true" tools:openDrawer="start"> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.design.widget.AppBarLayout android:layout_height="wrap_content" android:layout_width="match_parent" android:theme="@style/AppTheme.AppBarOverlay"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" app:popupTheme="@style/AppTheme.PopupOverlay" /> </android.support.design.widget.AppBarLayout> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" android:paddingBottom="@dimen/activity_vertical_margin" app:layout_behavior="@string/appbar_scrolling_view_behavior" > <TextView android:text="Hello World!" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </RelativeLayout> </android.support.design.widget.CoordinatorLayout> <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:headerLayout="@layout/nav_header_main" app:menu="@menu/activity_main_drawer" /> </android.support.v4.widget.DrawerLayout> 

И он работает отлично, как вы можете видеть здесь: [XML]

С anko я попытался скопировать каждую деталь из xml, получив этот код:

 class MainActivityUi: AnkoComponent<MainActivity> { override fun createView(ui: AnkoContext<MainActivity>) = with(ui) { drawerLayout { id = R.id.drawer_layout fitsSystemWindows = true coordinatorLayout { appBarLayout(R.style.AppTheme_AppBarOverlay) { toolbar { id = R.id.toolbar backgroundColor = colorAttr(R.attr.colorPrimary) popupTheme = R.style.AppTheme_PopupOverlay }.lparams(height=dimenAttr(R.attr.actionBarSize),width=matchParent) }.lparams(width=matchParent) relativeLayout { padding = dip(16) textView("Hello World!") }.lparams(height=matchParent,width=matchParent) { behavior = AppBarLayout.ScrollingViewBehavior() } }.lparams(height=matchParent,width=matchParent) navigationView { id = R.id.nav_view inflateHeaderView(R.layout.nav_header_main) inflateMenu(R.menu.activity_main_drawer) }.lparams(height=matchParent) { gravity = Gravity.START fitsSystemWindows = true } } } } 

И вместо этого я получаю эту белую статуэтку: АНКО

Единственные изменения, которые я сделал, были в изменении MainActivity setContentView (R.layout.activity_main), в MainActivityUi.setContentView (это).

Итак, мой вопрос: почему это происходит, когда у них одни и те же взгляды и макеты? и как я могу это исправить?

EDIT: Я использую проект по умолчанию, который он создается, когда в Android Studio вы выбираете новый proyect, а затем выбираете DrawerNavigationActivity. Если в setContentView я хочу показать представление xml, панель состояния будет синей (первый снимок экрана), но если я выберу, чтобы показать представление anko, я получаю белую строку состояния.

В обоих случаях я использую те же темы, цвета и т. Д., И при использовании макета xml все работает отлично, поэтому это должна быть проблема anko

Стараться сделать

window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

внутри onCreate ()

это сработало для меня

Справка

EDIT: Также мой код

 drawerLayout { lparams(width = matchParent, height = matchParent) coordinatorLayout { setPadding(0, dip(24), 0, 0) appBarLayout { toolbar { backgroundColor = primaryColor setTitleTextColor(primaryColorText) }.lparams(width = matchParent, height = dip(toolbar_size)) }.lparams(width = matchParent, height = dip(toolbar_size)) }.lparams(width = matchParent, height = matchParent) navigationView { }.lparams(width = dip(302), height = matchParent) { gravity = Gravity.START } } 

Вы ошибаетесь, полагая, что строка состояния transparent по умолчанию.

Согласно этому изображению

введите описание изображения здесь

взято из Справочника разработчиков Android. Проверьте: https://developer.android.com/training/material/theme.html

цвет строки состояния зависит от того, что вы определили в colors.xml или styles.xml в папке values как colorPrimaryDark , поэтому он не прозрачен.

Ваша проблема не white цвета в строке состояния, которая правильна для прозрачности, но недостаточно знаний об использовании тем в приложениях Android.

EDIT: изменение цвета строки состояния (Java):

 Window window = activity.getWindow(); // clear FLAG_TRANSLUCENT_STATUS flag: window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); // add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); // finally change the color window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color)); 

или

  public void setStatusBarColor(View statusBar,int color){ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window w = getWindow(); w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //status bar height int actionBarHeight = getActionBarHeight(); int statusBarHeight = getStatusBarHeight(); //action bar height statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight; statusBar.setBackgroundColor(color); } } 

Надеюсь, это поможет

Это не цвет вашего цвета.
Исправьте меня, если я ошибаюсь, я считаю, что вы используете версию Cyanogenmod OS 13.0 по внешнему виду вашего символа батареи. Переключите его обратно к теме по умолчанию в разделе тем. Затем colors.xml если проблема сохраняется в файле colors.xml .

Обратитесь к этой ссылке здесь, чтобы узнать о проблеме с прозрачным статусом Kotlin.
https://github.com/fython/MaterialStatusBarCompat