diff --git a/flashbar/src/main/java/com/andrognito/flashbar/Flashbar.kt b/flashbar/src/main/java/com/andrognito/flashbar/Flashbar.kt index d81f4f2..d286d05 100644 --- a/flashbar/src/main/java/com/andrognito/flashbar/Flashbar.kt +++ b/flashbar/src/main/java/com/andrognito/flashbar/Flashbar.kt @@ -15,6 +15,8 @@ import com.andrognito.flashbar.Flashbar.Gravity.TOP import com.andrognito.flashbar.anim.FlashAnim import com.andrognito.flashbar.anim.FlashAnimBarBuilder import com.andrognito.flashbar.anim.FlashAnimIconBuilder +import com.andrognito.flashbar.util.getContentView +import com.andrognito.flashbar.util.getRootView private const val DEFAULT_SHADOW_STRENGTH = 4 private const val DEFAUT_ICON_SCALE = 1.0f @@ -28,7 +30,13 @@ class Flashbar private constructor(private var builder: Builder) { * Shows a flashbar */ fun show() { - flashbarContainerView.show(builder.activity) + val anchorViewGroup = if (builder.gravity == TOP) { + builder.activity.getRootView() + } else { + builder.activity.getContentView() + } ?: return + + flashbarContainerView.show(anchorViewGroup) } /** @@ -52,7 +60,6 @@ class Flashbar private constructor(private var builder: Builder) { private fun construct() { flashbarContainerView = FlashbarContainerView(builder.activity) - flashbarContainerView.adjustOrientation(builder.activity) flashbarContainerView.addParent(this) flashbarView = FlashbarView(builder.activity) diff --git a/flashbar/src/main/java/com/andrognito/flashbar/FlashbarContainerView.kt b/flashbar/src/main/java/com/andrognito/flashbar/FlashbarContainerView.kt index a6ea1e7..72eaeda 100644 --- a/flashbar/src/main/java/com/andrognito/flashbar/FlashbarContainerView.kt +++ b/flashbar/src/main/java/com/andrognito/flashbar/FlashbarContainerView.kt @@ -22,7 +22,6 @@ import com.andrognito.flashbar.util.NavigationBarPosition.* import com.andrognito.flashbar.util.afterMeasured import com.andrognito.flashbar.util.getNavigationBarPosition import com.andrognito.flashbar.util.getNavigationBarSizeInPx -import com.andrognito.flashbar.util.getRootView /** * Container withView matching the height and width of the parent to hold a FlashbarView. @@ -56,6 +55,10 @@ internal class FlashbarContainerView(context: Context) private var showOverlay: Boolean = false private var overlayBlockable: Boolean = false + init { + layoutParams = RelativeLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT) + } + override fun onInterceptTouchEvent(event: MotionEvent): Boolean { when (event.action) { ACTION_DOWN -> { @@ -135,16 +138,14 @@ internal class FlashbarContainerView(context: Context) layoutParams = flashbarContainerViewLp } - - internal fun show(activity: Activity) { + internal fun show(anchorViewGroup: ViewGroup) { if (isBarShowing || isBarShown) return - val activityRootView = activity.getRootView() ?: return // Only add the withView to the parent once - if (this.parent == null) activityRootView.addView(this) + if (this.parent == null) anchorViewGroup.addView(this) - activityRootView.afterMeasured { + anchorViewGroup.afterMeasured { val enterAnim = enterAnimBuilder.withView(flashbarView).build() enterAnim.start(object : FlashAnim.InternalAnimListener { override fun onStart() { diff --git a/flashbar/src/main/java/com/andrognito/flashbar/FlashbarView.kt b/flashbar/src/main/java/com/andrognito/flashbar/FlashbarView.kt index 46d7108..cbf4274 100644 --- a/flashbar/src/main/java/com/andrognito/flashbar/FlashbarView.kt +++ b/flashbar/src/main/java/com/andrognito/flashbar/FlashbarView.kt @@ -44,28 +44,10 @@ import kotlinx.android.synthetic.main.flash_bar_view.view.* internal class FlashbarView(context: Context) : LinearLayout(context) { private val TOP_COMPENSATION_MARGIN = resources.getDimension(R.dimen.fb_top_compensation_margin).toInt() - private val BOTTOM_COMPENSATION_MARGIN = resources.getDimension(R.dimen.fb_bottom_compensation_margin).toInt() private lateinit var parentFlashbarContainer: FlashbarContainerView private lateinit var gravity: Gravity - private var isMarginCompensationApplied: Boolean = false - - override fun onMeasure(widthMeasureSpec: Int, heightMeasureSpec: Int) { - super.onMeasure(widthMeasureSpec, heightMeasureSpec) - - if (!isMarginCompensationApplied) { - isMarginCompensationApplied = true - - val params = layoutParams as ViewGroup.MarginLayoutParams - when (gravity) { - TOP -> params.topMargin = -TOP_COMPENSATION_MARGIN - BOTTOM -> params.bottomMargin = -BOTTOM_COMPENSATION_MARGIN - } - requestLayout() - } - } - internal fun init( gravity: Gravity, castShadow: Boolean, @@ -101,7 +83,6 @@ internal class FlashbarView(context: Context) : LinearLayout(context) { flashbarViewLp.addRule(ALIGN_PARENT_TOP) } BOTTOM -> { - flashbarViewContentLp.bottomMargin = BOTTOM_COMPENSATION_MARGIN flashbarViewLp.addRule(ALIGN_PARENT_BOTTOM) } } diff --git a/flashbar/src/main/java/com/andrognito/flashbar/util/CommonUtils.kt b/flashbar/src/main/java/com/andrognito/flashbar/util/CommonUtils.kt index bd21f65..1d4562f 100644 --- a/flashbar/src/main/java/com/andrognito/flashbar/util/CommonUtils.kt +++ b/flashbar/src/main/java/com/andrognito/flashbar/util/CommonUtils.kt @@ -50,7 +50,14 @@ internal fun Activity?.getRootView(): ViewGroup? { if (this == null || window == null || window.decorView == null) { return null } - return window.decorView as ViewGroup + return window.decorView as? ViewGroup +} + +internal fun Activity?.getContentView(): ViewGroup? { + if (this == null || window == null || window.decorView == null) { + return null + } + return window.decorView.findViewById(android.R.id.content) as? ViewGroup } internal fun Context.convertDpToPx(dp: Int): Int {