Zackratos / UltimateBarX

Make Android transparent statusbar and navigationbar easy.
Apache License 2.0
1.56k stars 166 forks source link

布局里BottomNavigationView FrameLayout或FragmentContainerView 点击item之后,item会拉伸变高 #51

Closed zebraoo closed 3 years ago

zebraoo commented 3 years ago

布局文件

<LinearLayout android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <androidx.fragment.app.FragmentContainerView android:id="@+id/fl_main" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="0dp" />

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottomNav"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@android:color/white"
    app:menu="@menu/bottom_nav_menu"/>

class 文件

class BottomNavFragmentActivity : ViewBindingActivity() { private var lastPosition = 0 private var mFragments = ArrayList() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) mFragments.clear() mFragments.add(FragmentTest()) mFragments.add(FragmentTest()) mFragments.add(FragmentTest()) mFragments.add(FragmentTest()) setFragmentPosition(0);

    statusBar {
        light = true
    }
    binding.bottomNav.setOnNavigationItemSelectedListener {
        when (it.itemId) {
            R.id.item_album -> {
                setFragmentPosition(0);
            }
            R.id.item_android -> {
                setFragmentPosition(1);
            }
            R.id.item_camera -> {
                setFragmentPosition(2);
            }
            R.id.item_games -> {
                setFragmentPosition(3);
            }
            else -> {

            }
        }
        return@setOnNavigationItemSelectedListener true
    }
}
private fun setFragmentPosition(position: Int) {

    val ft = supportFragmentManager.beginTransaction()
    val currentFragment = mFragments[position]
    val lastFragment = mFragments[lastPosition]
    lastPosition = position

    ft.hide(lastFragment)
    if (!currentFragment.isAdded) {
        supportFragmentManager.beginTransaction().remove(currentFragment).commit()
        ft.add(R.id.fl_main, mFragments[position])
    }
    ft.show(currentFragment)
    ft.commitAllowingStateLoss()
}

}

Zackratos commented 3 years ago

item 是哪个

zebraoo commented 3 years ago

item 是哪个

所有的item 只要一点击就会上移 第一张进入正常的 0d615d00f02d0b96a5e9fa9851bd7bf 第二张 点击item ba7c9707b64202cf9b93fd2a7b5b56a

Zackratos commented 3 years ago

BottomNavigationView 有bug,会莫名其妙的修改 padding,有一个临时解决方案,自定义 View 继承 BottomNavigationView,重写 setPaddingsetPaddingRelative 方法,把这两个方法置空,缺点是不能动态设置 padding 了,不过影响不大,基本不需要设置 BottomNavigationViewpadding

zebraoo commented 3 years ago

BottomNavigationView 有bug,会莫名其妙的修改 padding,有一个临时解决方案,自定义 View 继承 BottomNavigationView,重写 setPaddingsetPaddingRelative 方法,把这两个方法置空,缺点是不能动态设置 padding 了,不过影响不大,基本不需要设置 BottomNavigationViewpadding

是的 我查看每次的paddingBottom都是大概44的高度,用56dp//高度 也无效。按照你的方法可行!感谢!