Android support Toolbar with windowTranslucentStatus and windowActionModeOverlay

1.4k Views Asked by At

I'm building an Android application using AppCompatActivities and Material Design Support Library. I'm stucking into two problems:

android:windowTranslucentStatus

I've set windows:windowTranslucentStatus to true in my style and then enabled fitsSystemWindows in the root element of my activity. The problem is that the status bar become gray colored (see the screenshot below)

enter image description here

Here is my layout xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    tools:context=".app.activity.LoginActivityBase"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <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/ThemeOverlay.AppCompat.Light" />

    </android.support.design.widget.AppBarLayout>

    <!-- Login progress -->
    <LinearLayout
        android:id="@+id/login_status"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:gravity="center_horizontal"
        android:orientation="vertical"
        android:visibility="gone">

        <ProgressBar
            style="?android:attr/progressBarStyleLarge"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp" />

        <TextView
            android:id="@+id/login_status_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="16dp"
            android:fontFamily="sans-serif-light"
            android:text="@string/login_progress_signing_in"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <!-- Login form -->
    <ScrollView
        android:id="@+id/login_form"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

        <RelativeLayout
            style="@style/LoginFormContainer">

            <ImageView
                android:id="@+id/appLogo"
                android:contentDescription="@string/content_description"
                android:layout_width="match_parent"
                android:layout_height="100dp"
                android:layout_alignParentTop="true"
                android:layout_centerHorizontal="true"
                android:scaleType="centerInside"
                android:src="@drawable/placeholder"
                />

            <LinearLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical"
                android:layout_centerVertical="true">

                <EditText
                    android:id="@+id/email"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/prompt_email"
                    android:inputType="textEmailAddress"
                    android:maxLines="1"
                    android:singleLine="true" />

                <EditText
                    android:id="@+id/password"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:hint="@string/prompt_password"
                    android:imeActionId="@+id/login"
                    android:imeActionLabel="@string/action_sign_in_short"
                    android:imeOptions="actionUnspecified"
                    android:inputType="textPassword"
                    android:maxLines="1"
                    android:singleLine="true" />

                <LinearLayout
                    style="?android:attr/buttonBarStyle"
                    android:orientation="horizontal"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:layout_marginTop="16dp">
                    <Button
                        android:id="@+id/cancel_button"
                        style="?android:attr/buttonBarButtonStyle"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight=".5"
                        android:text="@string/Cancel"/>
                    <Button
                        android:id="@+id/sign_in_button"
                        style="?android:attr/buttonBarButtonStyle"
                        android:layout_width="0dp"
                        android:layout_height="wrap_content"
                        android:layout_weight=".5"
                        android:layout_gravity="end"
                        android:paddingLeft="32dp"
                        android:paddingRight="32dp"
                        android:text="@string/action_sign_in_short" />
                </LinearLayout>
            </LinearLayout>

            <Button
                android:id="@+id/register_button"
                style="?android:attr/buttonBarButtonStyle"
                android:layout_alignParentBottom="true"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="16dp"
                android:paddingLeft="32dp"
                android:paddingRight="32dp"
                android:text="@string/action_register_short" />
        </RelativeLayout>
    </ScrollView>
</LinearLayout>

How can I solve this?

android:windowActionModeOverlay

I've set android:windowActionModeOverlay to true in my AppTheme but when some text is selected the action mode bar does not overlay the toolbar (see screenshot below)

enter image description here

How can I solve this instead?

Thank you very much! :)

1

There are 1 best solutions below

0
On

Set this in your theme: <item name="windowActionModeOverlay">true</item>

and the ActionMode will be shown over the action bar instead of pushing it down. (If you're not using the latest AppCompat then you need to add the "android:" prefix to the property). It basically lets AppCompat know that you have a toolbar located in the top of the screen and that it should draw the ActionMode on top of it.