1.侧边栏
做了一个项目需要使用侧边栏,本来觉得很难实现,被navigation给框住了,加上框架使用的bottomnavigationbar,所以在网上查找让bottomnavigationbar放到侧边的方式,后面发现行不通。后来大神通过radiogroup自己“制作”了一个侧边栏布局如下:
<RadioGroup android:id="@+id/menuGroup" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <RadioButton android:id="@+id/menuHome" style="@style/menu_radio" android:drawableTop="@drawable/menu_home" android:text="@string/menu_home" /> <RadioButton android:id="@+id/menuDevice" style="@style/menu_radio" android:layout_marginTop="32dp" android:drawableTop="@drawable/menu_equip" android:text="@string/menu_equip" /> <RadioButton android:id="@+id/menuSet" style="@style/menu_radio" android:layout_marginTop="32dp" android:drawableTop="@drawable/menu_setting" android:text="@string/menu_setting" /> <RadioButton android:id="@+id/menuMore" style="@style/menu_radio" android:layout_marginTop="32dp" android:drawableTop="@drawable/menu_more" android:text="@string/menu_more" /> </RadioGroup>
后面通过fragmentmanager实现了和navigation相同的效果
代码如下:
binding.menuGroup.setOnCheckedChangeListener { _, i -> when (i) { R.id.menuHome -> { changeFragment("home") } R.id.menuDevice -> { changeFragment("equip") } R.id.menuSet -> { changeFragment("setting") } R.id.menuMore -> { changeFragment("more") } } } binding.menuHome.isChecked = true } fun changeFragment(tag: String) { var fts = supportFragmentManager.beginTransaction() when (tag) { "more" -> { fts.replace(binding.mainContent.id, MoreFragment()) } "home" -> { fts.replace(binding.mainContent.id, HomeFragment()) } "equip" -> { fts.replace(binding.mainContent.id, EquipFragment()) } "setting" -> { fts.replace(binding.mainContent.id, SettingFragment()) } "language"->{ fts.replace(binding.mainContent.id,MoreLanguageFragment()) } "soft"->{ fts.replace(binding.mainContent.id,SettingStartStopFragment()) } "run_time"->{ fts.replace(binding.mainContent.id,SettingRunningTimeFragment()) } "error_message"->{ fts.replace(binding.mainContent.id,SettingErrorMessagesFragment()) } } fts.commit() }
menugroup是RadioGroup的id,后面写了一个tag是以为界面太多,写一个方法直接调用比较方便