Commit451 / ForegroundViews

Views that supports a foreground, like FrameLayout does
Apache License 2.0
214 stars 29 forks source link

No foreground after screen rotation #7

Open dawidhermann opened 7 years ago

dawidhermann commented 7 years ago

On all android versions lower than 6 after screen rotation Foreground Button lose his foreground drawable. After some debuging i realize that onLayout was called twice - second time with changed = false, and then ForegroundDelegate.draw() was called, so when ForegroundDelegate tried to draw something mForegroundBoundsChanged was false. When i removed if (mForegroundBoundsChanged) statement everything was fine.

Jawnnypoo commented 7 years ago

I am actually unable to reproduce this with the sample project. Are you able to reproduce it there? And can you give a little more info such as what device and what version of Android it is?

Jawnnypoo commented 7 years ago

Any word on reproducing this? @dawidhermann

wrozwad commented 7 years ago

For me problem exists on all devices below Marshmallow including emulators. I'll check if it happens in sample project or create another one with this bug.

Jawnnypoo commented 7 years ago

@sosite okay, thanks really appreciate it.

wrozwad commented 7 years ago

Ok, finally I recreated this behavior. I made all tests on device with Android 4.4.2.

Change your main container from CoordinatorLayout to FrameLayout. Then ~ 1/5 times foreground layouts aren't draw after screen rotation on < Marshmallow.

But if you use any foreground layout as main container - then it doesn't work at all:

<com.commit451.foregroundviews.ForegroundRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#ccc"
    android:foreground="#60f0" />

If you use CoordinatorLayout as main container then you still must add android:fitsSystemWindows="true" to it.

<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <!-- without android:fitsSystemWindows="true" ForegroundButton doesn't work -->

    <com.commit451.foregroundviews.ForegroundButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#ccc"
        android:foreground="#60f0"
        android:text="test"/>
</android.support.design.widget.CoordinatorLayout>
technoir42 commented 5 years ago

14 might fix this.