Insets Dispatcher
Easily use window insets padding (e.g. status and navigation bars)
Documentation is being updated - check out Polar Dashboard for sample use in a project.
Dependency
Add this in your root build.gradle
file (not your module build.gradle
file):
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
Add this to your module's build.gradle
file:
dependencies {
...
compile 'com.pluscubed:insets-dispatcher:{latest-version}'
}
The library is versioned according to Semantic Versioning.
Usage
The InsetsDispatcher layouts use window insets to set the padding/margin of child views according to layout attributes. It uses window insets on 5.0+ and fitsSystemWindows
insets on 4.x. The insets are added to the existing padding/margin of the View (the information is saved in view tags).
On 4.x, no other views can have fitsSystemWindows="true"
because they would consume the insets. Ideally the dispatcher layout would be the root layout, and dispatcher layouts would be nested until the view that needs insets applied is reached.
The dispatcher layouts will also work for Fragments, as long as the Fragment root view is a dispatcher layout.
The layout/view attributes are:
(layout_)windowInsets
- flag - top, bottom(layout_)windowInsetsUseMargin
- boolean - default false (use padding)
The layout_
attributes are used for child views of the dispatcher layouts. The normal view attributes can be used to apply insets to the dispatcher layouts themselves.
These attributes must be applied under this package's namespace - i.e. xmlns:app="http://schemas.android.com/apk/res-auto"
to let Android decide.
####Basic Example:
<com.pluscubed.insetsdispatcher.view.InsetsDispatcherLinearLayout
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorPrimary"
android:elevation="4dp"
android:orientation="vertical"
app:layout_windowInsets="top">
<android.support.v7.widget.Toolbar
... />
<android.support.design.widget.TabLayout
... />
</LinearLayout>
</com.pluscubed.insetsdispatcher.view.InsetsDispatcherLinearLayout>
This would apply the top inset as a padding to the LinearLayout
.
####Custom dispatcher layouts Reference any of the pre-made dispatcher layouts in the view
package. All business code has already been separated into the helper classes, so all you need to do is call the correct callbacks.
License
Copyright 2016 Daniel Ciao
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.