Skip to content

Commit 9738cf1

Browse files
committed
Fix: Improve WindowInsets
Signed-off-by: imknown <imknown@qq.com>
1 parent 70c942c commit 9738cf1

File tree

3 files changed

+42
-26
lines changed

3 files changed

+42
-26
lines changed

app/src/main/java/net/imknown/android/forefrontinfo/ui/MainActivity.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import net.imknown.android.forefrontinfo.ui.settings.SettingsFragment
2727

2828
class MainActivity : AppCompatActivity() {
2929

30-
private val binding by viewBinding(MainActivityBinding::inflate)
30+
internal val binding by viewBinding(MainActivityBinding::inflate)
3131

3232
private val mainViewModel by viewModels<MainViewModel>()
3333

@@ -36,6 +36,8 @@ class MainActivity : AppCompatActivity() {
3636

3737
setContentView(binding.root)
3838

39+
initWindowInsets()
40+
3941
initViews()
4042

4143
if (savedInstanceState == null) {
@@ -51,17 +53,17 @@ class MainActivity : AppCompatActivity() {
5153
// mainViewModel.removeRequestPermissionResultListener()
5254
}
5355

54-
private fun initViews() {
56+
private fun initWindowInsets() {
5557
// https://developer.android.com/design/ui/mobile/guides/foundations/system-bars#button_modes
5658
// https://developer.android.com/develop/ui/views/layout/edge-to-edge#create-transparent
5759
// https://developer.android.com/develop/ui/views/layout/edge-to-edge-manually#change-color
5860
// https://developer.android.com/develop/ui/compose/layouts/system-bars#create-transparent
5961
// enableEdgeToEdge()
6062
WindowCompat.setDecorFitsSystemWindows(window, false)
6163

62-
ViewCompat.setOnApplyWindowInsetsListener(binding.appBar) { view, windowInsets ->
64+
ViewCompat.setOnApplyWindowInsetsListener(binding.appBar) { appBar, windowInsets ->
6365
val insets = windowInsets.getInsets(windowInsetsCompatTypes)
64-
view.updatePadding(
66+
appBar.updatePadding(
6567
left = insets.left,
6668
right = insets.right,
6769
top = insets.top
@@ -70,17 +72,19 @@ class MainActivity : AppCompatActivity() {
7072
windowInsets
7173
}
7274

73-
ViewCompat.setOnApplyWindowInsetsListener(binding.bottomNavigationView) { view, windowInsets ->
75+
ViewCompat.setOnApplyWindowInsetsListener(binding.bottomNavigationView) { bnView, windowInsets ->
7476
val insets = windowInsets.getInsets(windowInsetsCompatTypes)
75-
view.updatePadding(
77+
bnView.updatePadding(
7678
left = insets.left,
7779
right = insets.right,
7880
bottom = insets.bottom
7981
)
8082

8183
windowInsets
8284
}
85+
}
8386

87+
private fun initViews() {
8488
initSubtitle()
8589

8690
binding.bottomNavigationView.setOnItemSelectedListener {

app/src/main/java/net/imknown/android/forefrontinfo/ui/base/list/BaseListFragment.kt

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
77
import androidx.core.view.ViewCompat
8+
import androidx.core.view.doOnLayout
89
import androidx.core.view.updatePadding
910
import androidx.lifecycle.LiveData
1011
import com.google.android.material.color.MaterialColors
@@ -14,6 +15,7 @@ import net.imknown.android.forefrontinfo.base.mvvm.Event
1415
import net.imknown.android.forefrontinfo.base.mvvm.EventObserver
1516
import net.imknown.android.forefrontinfo.base.mvvm.windowInsetsCompatTypes
1617
import net.imknown.android.forefrontinfo.databinding.FragmentListBinding
18+
import net.imknown.android.forefrontinfo.ui.MainActivity
1719
import com.google.android.material.R as materialR
1820

1921
abstract class BaseListFragment : BaseFragment<FragmentListBinding>() {
@@ -36,6 +38,8 @@ abstract class BaseListFragment : BaseFragment<FragmentListBinding>() {
3638
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3739
// super.onViewCreated(view, savedInstanceState)
3840

41+
initWindowInsets()
42+
3943
initViews(savedInstanceState)
4044

4145
listViewModel.changeScrollBarModeEvent.observe(viewLifecycleOwner, EventObserver {
@@ -67,20 +71,22 @@ abstract class BaseListFragment : BaseFragment<FragmentListBinding>() {
6771
listViewModel.init(savedInstanceState)
6872
}
6973

70-
private fun initViews(savedInstanceState: Bundle?) {
71-
val bottomR = materialR.dimen.design_bottom_navigation_height
72-
val bottom = resources.getDimensionPixelSize(bottomR)
73-
ViewCompat.setOnApplyWindowInsetsListener(binding.recyclerView) { view, windowInsets ->
74+
private fun initWindowInsets() {
75+
ViewCompat.setOnApplyWindowInsetsListener(binding.recyclerView) { rv, windowInsets ->
7476
val insets = windowInsets.getInsets(windowInsetsCompatTypes)
75-
view.updatePadding(
76-
left = insets.left,
77-
right = insets.right,
78-
bottom = insets.bottom + (insets.bottom + bottom)
79-
)
77+
(activity as? MainActivity)?.binding?.bottomNavigationView?.doOnLayout { bnv ->
78+
rv.updatePadding(
79+
left = insets.left,
80+
right = insets.right,
81+
bottom = bnv.height
82+
)
83+
}
8084

8185
windowInsets
8286
}
87+
}
8388

89+
private fun initViews(savedInstanceState: Bundle?) {
8490
val color = MaterialColors.getColor(binding.root, materialR.attr.colorOnPrimaryContainer)
8591
binding.swipeRefreshLayout.setColorSchemeColors(color)
8692
val backgroundColor =

app/src/main/java/net/imknown/android/forefrontinfo/ui/settings/SettingsFragment.kt

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import android.os.Bundle
44
import android.view.View
55
import androidx.annotation.StringRes
66
import androidx.core.view.ViewCompat
7+
import androidx.core.view.doOnLayout
78
import androidx.core.view.updatePadding
89
import androidx.fragment.app.viewModels
910
import androidx.preference.ListPreference
@@ -15,7 +16,7 @@ import net.imknown.android.forefrontinfo.base.extension.isChinaMainlandTimezone
1516
import net.imknown.android.forefrontinfo.base.mvvm.EventObserver
1617
import net.imknown.android.forefrontinfo.base.mvvm.FragmentMixin
1718
import net.imknown.android.forefrontinfo.base.mvvm.windowInsetsCompatTypes
18-
import com.google.android.material.R as materialR
19+
import net.imknown.android.forefrontinfo.ui.MainActivity
1920

2021
class SettingsFragment : PreferenceFragmentCompat(), FragmentMixin {
2122

@@ -34,21 +35,26 @@ class SettingsFragment : PreferenceFragmentCompat(), FragmentMixin {
3435
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
3536
super.onViewCreated(view, savedInstanceState)
3637

38+
initWindowInsets()
39+
40+
initViews()
41+
}
42+
43+
private fun initWindowInsets() {
3744
listView.clipToPadding = false
38-
val bottomR = materialR.dimen.design_bottom_navigation_height
39-
val bottom = resources.getDimensionPixelSize(bottomR)
40-
ViewCompat.setOnApplyWindowInsetsListener(listView) { insetView, windowInsets ->
45+
46+
ViewCompat.setOnApplyWindowInsetsListener(listView) { rv, windowInsets ->
4147
val insets = windowInsets.getInsets(windowInsetsCompatTypes)
42-
insetView.updatePadding(
43-
left = insets.left,
44-
right = insets.right,
45-
bottom = insets.bottom + (insets.bottom + bottom)
46-
)
48+
(activity as? MainActivity)?.binding?.bottomNavigationView?.doOnLayout { bnv ->
49+
rv.updatePadding(
50+
left = insets.left,
51+
right = insets.right,
52+
bottom = bnv.height
53+
)
54+
}
4755

4856
windowInsets
4957
}
50-
51-
initViews()
5258
}
5359

5460
private fun initViews() {

0 commit comments

Comments
 (0)