Skip to content

Commit 3a16d49

Browse files
committed
fix snackbar position on Android >=15
1 parent 5473525 commit 3a16d49

File tree

2 files changed

+15
-21
lines changed

2 files changed

+15
-21
lines changed

app/src/main/kotlin/de/salomax/currencies/view/main/MainActivity.kt

+6-21
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import android.view.KeyEvent
1515
import android.view.Menu
1616
import android.view.MenuItem
1717
import android.view.View
18+
import android.view.ViewGroup
1819
import android.widget.AdapterView
1920
import android.widget.DatePicker
2021
import android.widget.FrameLayout
@@ -25,7 +26,10 @@ import androidx.appcompat.app.AlertDialog
2526
import androidx.appcompat.widget.AppCompatButton
2627
import androidx.appcompat.widget.AppCompatImageButton
2728
import androidx.core.text.HtmlCompat
29+
import androidx.core.view.ViewCompat
30+
import androidx.core.view.WindowInsetsCompat
2831
import androidx.core.view.doOnLayout
32+
import androidx.core.view.updateLayoutParams
2933
import androidx.lifecycle.Lifecycle
3034
import androidx.lifecycle.ViewModelProvider
3135
import androidx.lifecycle.lifecycleScope
@@ -302,8 +306,7 @@ class MainActivity : BaseActivity() {
302306
getString(R.string.copied_to_clipboard, copyText),
303307
HtmlCompat.FROM_HTML_MODE_LEGACY
304308
).let {
305-
Snackbar.make(this, tvCalculations, it, Snackbar.LENGTH_SHORT)
306-
.placeOnTop()
309+
Snackbar.make(this, findViewById(R.id.snackbar_top_position), it, Snackbar.LENGTH_SHORT)
307310
.setBackgroundTint(MaterialColors.getColor(this, R.attr.colorPrimary, null))
308311
.setTextColor(MaterialColors.getColor(this, R.attr.colorOnPrimary, null))
309312
.show()
@@ -362,8 +365,7 @@ class MainActivity : BaseActivity() {
362365
viewModel.getError().observe(this) {
363366
// error
364367
it?.let {
365-
Snackbar.make(this, tvCalculations, HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_LEGACY), Snackbar.LENGTH_INDEFINITE) // show for 5s
366-
.placeOnTop()
368+
Snackbar.make(this, findViewById(R.id.snackbar_top_position), HtmlCompat.fromHtml(it, HtmlCompat.FROM_HTML_MODE_LEGACY), Snackbar.LENGTH_INDEFINITE) // show for 5s
367369
.setBackgroundTint(MaterialColors.getColor(this, R.attr.colorError, null))
368370
.setTextColor(MaterialColors.getColor(this, R.attr.colorOnError, null))
369371
.setActionTextColor(MaterialColors.getColor(this, R.attr.colorOnError, null))
@@ -489,7 +491,6 @@ class MainActivity : BaseActivity() {
489491
override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
490492
// IMPORTANT: can't work with simple keyCodes here, as depending on the keyboard
491493
// configuration, wrong values will be returned (e.g. KEYCODE_8 instad of KEYCODE_PLUS).
492-
@Suppress("MoveVariableDeclarationIntoWhen")
493494
val key = event?.keyCharacterMap?.get(keyCode, event.metaState)?.let { Char(it) }
494495
when (key) {
495496
// numbers
@@ -561,20 +562,4 @@ class MainActivity : BaseActivity() {
561562
}
562563
}
563564

564-
/**
565-
* Show snackbar at the top instead of the bottom.
566-
* Also make it only as wide as the main display is. Looking way better in landscape mode.
567-
*/
568-
private fun Snackbar.placeOnTop(): Snackbar {
569-
swipeRefresh.doOnLayout {
570-
val view = this.view
571-
val params = view.layoutParams as FrameLayout.LayoutParams
572-
params.gravity = Gravity.TOP
573-
// setting width
574-
params.width = it.measuredWidth - this.view.paddingStart - this.view.paddingEnd
575-
view.layoutParams = params
576-
}
577-
return this
578-
}
579-
580565
}

app/src/main/res/layout/main_display.xml

+9
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,15 @@
1111
android:layout_height="match_parent"
1212
android:background="@drawable/bg_display">
1313

14+
<androidx.coordinatorlayout.widget.CoordinatorLayout
15+
android:id="@+id/snackbar_top_position"
16+
android:layout_width="match_parent"
17+
android:layout_height="wrap_content"
18+
android:elevation="10dp"
19+
app:layout_constraintEnd_toEndOf="parent"
20+
app:layout_constraintStart_toStartOf="parent"
21+
app:layout_constraintTop_toTopOf="parent" />
22+
1423
<!-- guideline **************************************************** -->
1524

1625
<androidx.constraintlayout.widget.Guideline

0 commit comments

Comments
 (0)