Open dawidhermann opened 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?
Any word on reproducing this? @dawidhermann
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.
@sosite okay, thanks really appreciate it.
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>
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 thenForegroundDelegate.draw()
was called, so when ForegroundDelegate tried to draw somethingmForegroundBoundsChanged
was false. When i removedif (mForegroundBoundsChanged)
statement everything was fine.