Java tutorial
/* * Copyright (C) 2015 The Android Open Source Project * Copyright (C) 2016 Yaroslav Mytkalyk * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.doctoror.fuckoffmusicplayer.presentation.widget; import android.content.Context; import android.graphics.Rect; import android.support.v4.view.ViewCompat; import android.util.AttributeSet; import android.widget.FrameLayout; /** * Like {@link android.support.design.internal.ScrimInsetsFrameLayout}, but does not affect * fitsSystemWindows */ public class NoOffsetScrimInsetsFrameLayout extends FrameLayout { private Rect mInsets; public NoOffsetScrimInsetsFrameLayout(Context context) { this(context, null); } public NoOffsetScrimInsetsFrameLayout(Context context, AttributeSet attrs) { this(context, attrs, 0); } public NoOffsetScrimInsetsFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); setWillNotDraw(true); // No need to draw until the insets are adjusted ViewCompat.setOnApplyWindowInsetsListener(this, (v, insets) -> { if (null == mInsets) { mInsets = new Rect(); } mInsets.set(insets.getSystemWindowInsetLeft(), insets.getSystemWindowInsetTop(), insets.getSystemWindowInsetRight(), insets.getSystemWindowInsetBottom()); setWillNotDraw(!insets.hasSystemWindowInsets()); ViewCompat.postInvalidateOnAnimation(NoOffsetScrimInsetsFrameLayout.this); InsetsHolder.getInstance().onInsetsChanged(mInsets); return insets; }); } }