private var mContent: Fragment = HomeFragment.newInstance()
private var fm: FragmentManager? = null
#这里可以多个
private val tags = arrayOf("主页", "我的")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
stateCheck(savedInstanceState)
val rb = arrayOfNulls<RadioButton>(2)
rb[0] = rb_home;
rb[1] = rb_me;
for (r in rb) {
val drawables = r!!.getCompoundDrawables()
val rect = Rect(0, 0, drawables[1].minimumWidth / 2, drawables[1].minimumHeight / 2)
drawables[1].bounds = rect
r.setCompoundDrawables(null, drawables[1], null, null)
}
rg_main.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
0-> switchContent(mContent, HomeFragment.newInstance(), 0)
1 -> switchContent(mContent, MineFragment.newInstance(), 1)
}
}
}
private fun stateCheck(savedInstanceState: Bundle?) {
if (savedInstanceState == null) {
fm = supportFragmentManager
val fts = fm!!.beginTransaction()
val af = HomeFragment()
mContent = af
fts.add(R.id.content, af, tags[0])
fts.commit()
} else {
val af = supportFragmentManager
.findFragmentByTag(tags[0]) as HomeFragment
val gf = supportFragmentManager
.findFragmentByTag(tags[1]) as MineFragment
supportFragmentManager.beginTransaction().show(af).hide(gf).commit()
}
}
/**
* fragment 切换
*
* @param from
* @param to
*/
private fun switchContent(from: Fragment, to: Fragment, position: Int) {
if (mContent !== to) {
mContent = to
val transaction = fm!!.beginTransaction()
if (!to.isAdded) { // 先判断是否被add过
transaction.hide(from)
.add(R.id.content, to, tags[position]).commit() // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(from).show(to).commit() // 隐藏当前的fragment,显示下一个
}
}
}
代码 ,缩小drawableTop
val rb = arrayOfNulls<RadioButton>(2)
rb[0] = rb_home;
rb[1] = rb_me;
for (r in rb) {
val drawables = r!!.getCompoundDrawables()
val rect = Rect(0, 0, drawables[1].minimumWidth / 2, drawables[1].minimumHeight / 2)
drawables[1].bounds = rect
r.setCompoundDrawables(null, drawables[1], null, null)
}
rg_main.setOnCheckedChangeListener { group, checkedId ->
when (checkedId) {
0-> switchContent(mContent, HomeFragment.newInstance(), 0)
1 -> switchContent(mContent, MineFragment.newInstance(), 1)
}
}
布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_weight="1"
android:layout_height="0dp">
</FrameLayout>
<RadioGroup
android:layout_width="match_parent"
android:layout_height="54dp"
android:orientation="horizontal"
android:id="@+id/rg_main">
<RadioButton
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:button="@null"
android:id="@+id/rb_home"
android:layout_weight="1"
android:drawableTop="@drawable/rbhome"
android:checked="true"
android:text="主页"
android:gravity="center"
android:textColor="@drawable/bottom_navigation_colors"/>
<RadioButton
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:button="@null"
android:id="@+id/rb_me"
android:layout_weight="1"
android:drawableTop="@drawable/rbmy"
android:text="我的"
android:gravity="center"
android:textColor="@drawable/bottom_navigation_colors"/>
</RadioGroup>
</LinearLayout>
rbmy
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_me_3x"/>
<item android:drawable="@mipmap/icon_me2_3x"/>
</selector>
rbhome
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@mipmap/icon_index_3x"/>
<item android:drawable="@mipmap/icon_index2_3x"/>
</selector>
bottom_navigation_colors
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:state_checked="true"
android:color="@color/colorPrimary" />
<item
android:state_checked="false"
android:color="@color/gray" />
</selector>