android – 状态栏不透明但是白色

为了用anko DSL测试kotlin我决定在最后一个
android studio ide(2.1.3)中使用kotlin插件(1.0.3)和最新的anko库(0.9)开始一个新的proyect

我使用默认的proyect Navigation Drawer Activity,所以我只需要将主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>

正如你在这里看到的那样,它工作得很好:
《android – 状态栏不透明但是白色》

使用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
            }
        }
    }
}

相反,我得到了这个白色状态栏:《android – 状态栏不透明但是白色》

我做的唯一更改是在MainActivity中将setContentView(R.layout.activity_main)更改为MainActivityUi.setContentView(this).

所以,我的问题是,当它们是相同的视图和布局时,为什么会发生这种情况?我该如何解决这个问题?

编辑:我正在使用在Android Studio中创建的默认项目,您选择新的项目,然后选择DrawerNavigationActivity.如果在setContentView中我选择显示xml的视图,状态栏是蓝色的(第一个屏幕截图),但如果我选择显示anko的视图,我会得到白色状态栏.

在这两种情况下,我使用相同的主题,颜色等,当使用xml布局时,一切都运行完美,所以它必须是一个anko的问题

最佳答案 试着做

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

在onCreate()里面

它对我有用

Reference

编辑:
也是我的代码

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
  }
}
点赞