Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁(yè)按鈕方法
在這一節(jié)中,我們實(shí)現(xiàn)一個(gè)底層分頁(yè)按鈕。

實(shí)現(xiàn)這種布局有非常的多的方式,這里我們采用的是RadioGroup 和ViewPager 實(shí)現(xiàn)這種界面形式。
ViewPager 中用適配器裝載4個(gè)不同的Fragment,當(dāng)ViewPager 滑動(dòng)或者RadioGroup 有點(diǎn)擊的時(shí)候,選擇到相應(yīng)的Fragment 中,進(jìn)行展示。
這就是我們實(shí)現(xiàn)分頁(yè)按鈕的思路。
主布局 activity_main
在主布局中,我們使用了 4個(gè)的RadioButton 放在一組 RadioGroup 中,使得layout_alignParentBottom 為真,讓他一直放在界面的底部。
一個(gè)ViewPager,用來(lái)裝載不同的界面。
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<RadioGroup
android:id = "@+id/rg_tab_bar"
android:layout_width="match_parent"
android:layout_alignParentBottom="true"
android:layout_height="50dp"
android:background="@color/white"
android:orientation="horizontal">
<RadioButton
android:id="@+id/rb_home"
android:text="主頁(yè)"
android:button="@null"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:drawableTop="@drawable/tab_menu_home"
android:gravity="center">
</RadioButton>
<RadioButton
android:id="@+id/rb_query"
android:text="查詢"
android:button="@null"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:drawableTop="@drawable/tab_menu_query"
android:gravity="center">
</RadioButton>
<RadioButton
android:id="@+id/rb_predict"
android:text="預(yù)測(cè)"
android:button="@null"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:drawableTop="@drawable/tab_menu_predict"
android:gravity="center">
</RadioButton>
<RadioButton
android:id = "@+id/rb_user"
android:text="個(gè)人中心"
android:button="@null"
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="match_parent"
android:drawableTop="@drawable/tab_menu_user"
android:gravity="center">
</RadioButton>
</RadioGroup>
<androidx.viewpager.widget.ViewPager
android:id ="@+id/vpager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_above="@+id/rg_tab_bar"/>
</RelativeLayout>剛好我們使用的是RelativeLayout 的布局方式,android:layout_above 要進(jìn)行相應(yīng)的設(shè)置,不然RadioButton 可能會(huì)點(diǎn)擊不到。
適配器
創(chuàng)建是個(gè)不同的Fragment 分別為 HomeFragment、QueryFragment、PredictFragment、UserFragment。
把適配器中,加載進(jìn) 這四個(gè)Fragment 。
class MyFragmentPagerAdapter(fm:FragmentManager) : FragmentPagerAdapter(fm) {
private var homeF:HomeFragment = HomeFragment()
private var queryF:QueryFragment = QueryFragment()
private var preF:PredictFragment = PredictFragment()
private var userF:UserFragment = UserFragment()
override fun getCount(): Int {
return 4
}
override fun getItem(position: Int): Fragment {
var fragment = when(position){
0 -> {homeF}
1 ->{queryF}
2 ->{preF}
3 ->{userF}
else -> {homeF}
}
return fragment
}
}
主頁(yè)面的控制
有了前面的準(zhǔn)備以后,在主界面中需要設(shè)置下ViewPager 和 RadioButton 使得 程序的點(diǎn)擊事件和滾動(dòng)事件,確定我們選定的界面。
class MainActivity : AppCompatActivity(), RadioGroup.OnCheckedChangeListener,ViewPager.OnPageChangeListener
{
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
rg_tab_bar.setOnCheckedChangeListener(this)
vpager.adapter = MyFragmentPagerAdapter(supportFragmentManager)
vpager.setCurrentItem(0)
rb_home.isChecked = true
vpager.setOnPageChangeListener(this)
}
override fun onCheckedChanged(p0: RadioGroup?, p1: Int) {
when(p1){
R.id.rb_home->{vpager.setCurrentItem(0)}
R.id.rb_query ->{vpager.setCurrentItem(1)}
R.id.rb_predict ->{vpager.setCurrentItem(2)}
R.id.rb_user ->{vpager.setCurrentItem(3)}
}
}
override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {
}
override fun onPageSelected(position: Int) {
}
override fun onPageScrollStateChanged(state: Int) {
if (state == 2){
when(vpager.currentItem){
0 -> rb_home.isChecked = true
1 -> rb_query.isChecked = true
2 -> rb_predict.isChecked = true
3 -> rb_user.isChecked = true
}
}
}
}小結(jié)
這節(jié)應(yīng)該是我們最后一節(jié)寫(xiě)控件的東西了,控件的東西很多,而且比較難理解,還需要不停的進(jìn)行學(xué)習(xí)和總結(jié),我們后面還會(huì)有不同的專題來(lái)介紹,有時(shí)間可以多看看別人寫(xiě)的控件,來(lái)豐富我們做界面的思路路。
到此這篇關(guān)于Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁(yè)按鈕方法的文章就介紹到這了,更多相關(guān)Kotlin底層分頁(yè)按鈕內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android實(shí)現(xiàn)自動(dòng)變換大小的ViewPager
- android?viewpager實(shí)現(xiàn)輪播效果
- Android使用ViewPager實(shí)現(xiàn)翻頁(yè)效果
- Android自定義View實(shí)現(xiàn)遙控器按鈕
- Android單選多選按鈕的使用方法
- Android實(shí)現(xiàn)單選按鈕
- Android 中使用RadioGroup和Fragment實(shí)現(xiàn)底部導(dǎo)航欄的功能
- Android基礎(chǔ)控件RadioGroup使用方法詳解
- Android RadioGroup多行顯示效果 解決單選問(wèn)題
相關(guān)文章
Android 自定義view實(shí)現(xiàn)TopBar效果
這篇文章主要為大家詳細(xì)介紹了Android 自定義view實(shí)現(xiàn)TopBar效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09
Android編程實(shí)現(xiàn)簡(jiǎn)單的UDP Client實(shí)例
這篇文章主要介紹了Android編程實(shí)現(xiàn)簡(jiǎn)單的UDP Client,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)UDP Clinet客戶端的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04
Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法
這篇文章主要介紹了Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法,需要的朋友可以參考下2017-12-12
Android實(shí)現(xiàn)從緩存中讀取圖片與異步加載功能類
這篇文章主要介紹了Android實(shí)現(xiàn)從緩存中讀取圖片與異步加載功能類,涉及Android針對(duì)緩存的操作及圖片異步加載相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08
Android利用WindowManager生成懸浮按鈕及懸浮菜單
這篇文章主要為大家詳細(xì)介紹了Android利用WindowManager生成懸浮按鈕及懸浮菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01
Android 下載文件通知欄顯示進(jìn)度條功能的實(shí)例代碼
這篇文章主要介紹了Android 下載文件通知欄顯示進(jìn)度條功能的實(shí)例代碼,通過(guò)使用AsyncTask異步任務(wù)實(shí)現(xiàn),調(diào)用publishProgress()方法刷新進(jìn)度來(lái)實(shí)現(xiàn),具體代碼大家參考下本文2018-04-04
Android setTag方法的key問(wèn)題解決辦法
這篇文章主要介紹了Android setTag方法的key問(wèn)題解決辦法的相關(guān)資料,需要的朋友可以參考下2016-09-09

