Skip to content

Commit

Permalink
Merge pull request #38 from LouisCAD/view-dsl-design-rename-lparams
Browse files Browse the repository at this point in the history
Improve View DSL Design layout parameters extensions
  • Loading branch information
LouisCAD authored Mar 3, 2018
2 parents b4776d1 + 2def91d commit aed78d2
Show file tree
Hide file tree
Showing 5 changed files with 70 additions and 40 deletions.
15 changes: 7 additions & 8 deletions sample/src/main/java/xyz/louiscad/splittiessample/demo/DemoUi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ import splitties.resources.txt
import splitties.viewdsl.core.Ui
import splitties.viewdsl.core.add
import splitties.viewdsl.core.margin
import splitties.viewdsl.core.matchParent
import splitties.viewdsl.core.v
import splitties.viewdsl.design.lParams
import splitties.viewdsl.design.appBarLParams
import splitties.viewdsl.design.contentScrollingWithAppBarLParams
import splitties.viewdsl.design.defaultLParams
import splitties.views.appcompat.Toolbar
import splitties.views.imageResource
import splitties.views.setPaddingDp
Expand All @@ -49,19 +50,17 @@ class DemoUi(override val ctx: DemoActivity) : Ui {

override val root = v(::CoordinatorLayout) {
fitsSystemWindows = true
add(::AppBarLayout, R.id.app_bar, R.style.AppTheme_AppBarOverlay, lParams(width = matchParent)) {
add(::Toolbar, lParams {
add(::AppBarLayout, R.id.app_bar, R.style.AppTheme_AppBarOverlay, appBarLParams()) {
add(::Toolbar, defaultLParams {
scrollFlags = SCROLL_FLAG_ENTER_ALWAYS
}) {
subtitle = txt(R.string.subtitle_items_count_hint)
popupTheme = R.style.AppTheme_PopupOverlay
ctx.setSupportActionBar(this)
}
}
add(recyclerView, lParams(width = matchParent, height = matchParent) {
behavior = AppBarLayout.ScrollingViewBehavior()
})
add(fab, lParams(gravity = Gravity.BOTTOM or Gravity.END) {
add(recyclerView, contentScrollingWithAppBarLParams())
add(fab, defaultLParams(gravity = Gravity.BOTTOM or Gravity.END) {
margin = dip(16)
})
}
Expand Down
28 changes: 13 additions & 15 deletions sample/src/main/java/xyz/louiscad/splittiessample/main/MainUi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -18,10 +18,7 @@ package xyz.louiscad.splittiessample.main

import android.os.Build.VERSION.SDK_INT
import android.support.design.widget.AppBarLayout
import android.support.design.widget.AppBarLayout.LayoutParams.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
import android.support.design.widget.AppBarLayout.LayoutParams.SCROLL_FLAG_SCROLL
import android.support.design.widget.CollapsingToolbarLayout
import android.support.design.widget.CollapsingToolbarLayout.LayoutParams.COLLAPSE_MODE_PIN
import android.support.design.widget.CoordinatorLayout
import android.support.design.widget.FloatingActionButton
import android.support.v4.widget.NestedScrollView
Expand All @@ -41,12 +38,17 @@ import splitties.viewdsl.core.margin
import splitties.viewdsl.core.matchParent
import splitties.viewdsl.core.v
import splitties.viewdsl.core.verticalLayout
import splitties.viewdsl.design.EXIT_UNTIL_COLLAPSED
import splitties.viewdsl.design.PIN
import splitties.viewdsl.design.SCROLL
import splitties.viewdsl.design.appBarLParams
import splitties.viewdsl.design.contentScrollingWithAppBarLParams
import splitties.viewdsl.design.defaultLParams
import splitties.views.appcompat.Toolbar
import splitties.views.imageResource
import splitties.views.setCompoundDrawables
import splitties.views.textResource
import xyz.louiscad.splittiessample.R
import splitties.viewdsl.design.lParams as dLParams

class MainUi(override val ctx: MainActivity) : Ui {

Expand Down Expand Up @@ -85,25 +87,21 @@ class MainUi(override val ctx: MainActivity) : Ui {

override val root = v(::CoordinatorLayout) {
fitsSystemWindows = true
add(::AppBarLayout, R.id.app_bar, R.style.AppTheme_AppBarOverlay,
dLParams(width = matchParent, height = dip(180))) {
add(::CollapsingToolbarLayout, dLParams(height = matchParent) {
scrollFlags = SCROLL_FLAG_SCROLL or SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
add(::AppBarLayout, R.id.app_bar, R.style.AppTheme_AppBarOverlay, appBarLParams(dip(180))) {
add(::CollapsingToolbarLayout, defaultLParams(height = matchParent) {
scrollFlags = SCROLL or EXIT_UNTIL_COLLAPSED
}) {
fitsSystemWindows = true
setContentScrimColor(styledColor(R.attr.colorPrimary))
add(::Toolbar, dLParams(height = styledDimenPxSize(R.attr.actionBarSize)) {
collapseMode = COLLAPSE_MODE_PIN
}) {
val actionBarSize = styledDimenPxSize(R.attr.actionBarSize)
add(::Toolbar, defaultLParams(height = actionBarSize, collapseMode = PIN)) {
ctx.setSupportActionBar(this)
popupTheme = R.style.AppTheme_PopupOverlay
}
}
}
add(content, dLParams(width = matchParent, height = matchParent) {
behavior = AppBarLayout.ScrollingViewBehavior()
})
add(fab, dLParams {
add(content, contentScrollingWithAppBarLParams())
add(fab, defaultLParams {
anchorId = R.id.app_bar
anchorGravity = Gravity.BOTTOM or Gravity.END
margin = dip(16)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,24 @@ package splitties.viewdsl.design
import android.support.design.widget.AppBarLayout
import splitties.viewdsl.core.matchParent
import splitties.viewdsl.core.wrapContent
import android.support.design.widget.AppBarLayout.LayoutParams as LP

inline fun AppBarLayout.lParams(
@Suppress("unused") val AppBarLayout.SCROLL get() = LP.SCROLL_FLAG_SCROLL
@Suppress("unused") val AppBarLayout.EXIT_UNTIL_COLLAPSED get() = LP.SCROLL_FLAG_EXIT_UNTIL_COLLAPSED
@Suppress("unused") val AppBarLayout.ENTER_ALWAYS get() = LP.SCROLL_FLAG_ENTER_ALWAYS
@Suppress("unused") val AppBarLayout.ENTER_ALWAYS_COLLAPSED: Int
get() = LP.SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED
@Suppress("unused") val AppBarLayout.SNAP get() = LP.SCROLL_FLAG_SNAP

inline fun AppBarLayout.defaultLParams(
width: Int = matchParent,
height: Int = wrapContent,
initParams: AppBarLayout.LayoutParams.() -> Unit
) = AppBarLayout.LayoutParams(width, height).apply(initParams)
scrollFlags: Int = ENTER_ALWAYS,
initParams: LP.() -> Unit
) = LP(width, height).also { it.scrollFlags = scrollFlags }.apply(initParams)

inline fun AppBarLayout.lParams(
inline fun AppBarLayout.defaultLParams(
width: Int = matchParent,
height: Int = wrapContent
) = AppBarLayout.LayoutParams(width, height)
height: Int = wrapContent,
scrollFlags: Int = ENTER_ALWAYS
) = LP(width, height).also { it.scrollFlags = scrollFlags }
Original file line number Diff line number Diff line change
Expand Up @@ -21,20 +21,28 @@ package splitties.viewdsl.design
import android.support.design.widget.CollapsingToolbarLayout
import splitties.viewdsl.core.matchParent
import splitties.viewdsl.core.wrapContent
import android.support.design.widget.CollapsingToolbarLayout.LayoutParams as LP

inline fun CollapsingToolbarLayout.lParams(
@Suppress("unused") val CollapsingToolbarLayout.PIN get() = LP.COLLAPSE_MODE_PIN
@Suppress("unused") val CollapsingToolbarLayout.PARALLAX get() = LP.COLLAPSE_MODE_PARALLAX

inline fun CollapsingToolbarLayout.defaultLParams(
width: Int = matchParent,
height: Int = wrapContent,
initParams: CollapsingToolbarLayout.LayoutParams.() -> Unit
) = CollapsingToolbarLayout.LayoutParams(width, height).apply(initParams)
collapseMode: Int = LP.COLLAPSE_MODE_OFF,
parallaxMultiplier: Float = 0.5f // Default value as of 27.1.0
) = LP(width, height).also {
it.collapseMode = collapseMode
it.parallaxMultiplier = parallaxMultiplier
}

inline fun CollapsingToolbarLayout.lParams(
inline fun CollapsingToolbarLayout.defaultLParams(
width: Int = matchParent,
height: Int = wrapContent,
collapseMode: Int
) = CollapsingToolbarLayout.LayoutParams(width, height).also { it.collapseMode = collapseMode }
initParams: LP.() -> Unit
) = LP(width, height).apply(initParams)

inline fun CollapsingToolbarLayout.lParams(
inline fun CollapsingToolbarLayout.defaultLParams(
width: Int = matchParent,
height: Int = wrapContent
) = CollapsingToolbarLayout.LayoutParams(width, height)
) = LP(width, height)
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,39 @@

package splitties.viewdsl.design

import android.support.design.widget.AppBarLayout
import android.support.design.widget.CoordinatorLayout
import android.view.Gravity
import android.view.ViewGroup.LayoutParams.MATCH_PARENT
import splitties.viewdsl.core.matchParent
import splitties.viewdsl.core.wrapContent

inline fun CoordinatorLayout.lParams(
inline fun CoordinatorLayout.defaultLParams(
width: Int = wrapContent,
height: Int = wrapContent,
gravity: Int = Gravity.NO_GRAVITY,
initParams: CoordinatorLayout.LayoutParams.() -> Unit
) = CoordinatorLayout.LayoutParams(width, height).also { it.gravity = gravity }.apply(initParams)

inline fun CoordinatorLayout.lParams(
inline fun CoordinatorLayout.defaultLParams(
width: Int = wrapContent,
height: Int = wrapContent,
gravity: Int = Gravity.NO_GRAVITY
) = CoordinatorLayout.LayoutParams(width, height).also { it.gravity = gravity }

inline fun CoordinatorLayout.lParams(
inline fun CoordinatorLayout.defaultLParams(
width: Int = wrapContent,
height: Int = wrapContent
) = CoordinatorLayout.LayoutParams(width, height)

inline fun CoordinatorLayout.appBarLParams(
height: Int = wrapContent,
initParams: CoordinatorLayout.LayoutParams.() -> Unit = {}
) = defaultLParams(width = matchParent, height = height, initParams = initParams)

@Suppress("unused")
fun CoordinatorLayout.contentScrollingWithAppBarLParams() = scrollingContentLParams

private val scrollingContentLParams = CoordinatorLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT).also {
it.behavior = AppBarLayout.ScrollingViewBehavior()
}

0 comments on commit aed78d2

Please sign in to comment.