Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁按鈕方法
在這一節(jié)中,我們實(shí)現(xiàn)一個(gè)底層分頁按鈕。
實(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)分頁按鈕的思路。
主布局 activity_main
在主布局中,我們使用了 4個(gè)的RadioButton
放在一組 RadioGroup
中,使得layout_alignParentBottom
為真,讓他一直放在界面的底部。
一個(gè)ViewPager
,用來裝載不同的界面。
<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="主頁" 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 } }
主頁面的控制
有了前面的準(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é)寫控件的東西了,控件的東西很多,而且比較難理解,還需要不停的進(jìn)行學(xué)習(xí)和總結(jié),我們后面還會(huì)有不同的專題來介紹,有時(shí)間可以多看看別人寫的控件,來豐富我們做界面的思路路。
到此這篇關(guān)于Kotlin RadioGroup與ViewPager實(shí)現(xiàn)底層分頁按鈕方法的文章就介紹到這了,更多相關(guān)Kotlin底層分頁按鈕內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Android實(shí)現(xiàn)自動(dòng)變換大小的ViewPager
- android?viewpager實(shí)現(xiàn)輪播效果
- Android使用ViewPager實(shí)現(xiàn)翻頁效果
- Android自定義View實(shí)現(xiàn)遙控器按鈕
- Android單選多選按鈕的使用方法
- Android實(shí)現(xiàn)單選按鈕
- Android 中使用RadioGroup和Fragment實(shí)現(xiàn)底部導(dǎo)航欄的功能
- Android基礎(chǔ)控件RadioGroup使用方法詳解
- Android RadioGroup多行顯示效果 解決單選問題
相關(guān)文章
Android 自定義view實(shí)現(xiàn)TopBar效果
這篇文章主要為大家詳細(xì)介紹了Android 自定義view實(shí)現(xiàn)TopBar效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09Android編程實(shí)現(xiàn)簡單的UDP Client實(shí)例
這篇文章主要介紹了Android編程實(shí)現(xiàn)簡單的UDP Client,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)UDP Clinet客戶端的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法
這篇文章主要介紹了Android Studio 升級(jí)到3.0 提示 java.lang.NoClassDefFoundError的解決方法,需要的朋友可以參考下2017-12-12Android實(shí)現(xiàn)從緩存中讀取圖片與異步加載功能類
這篇文章主要介紹了Android實(shí)現(xiàn)從緩存中讀取圖片與異步加載功能類,涉及Android針對(duì)緩存的操作及圖片異步加載相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08Android利用WindowManager生成懸浮按鈕及懸浮菜單
這篇文章主要為大家詳細(xì)介紹了Android利用WindowManager生成懸浮按鈕及懸浮菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-01-01Android 下載文件通知欄顯示進(jìn)度條功能的實(shí)例代碼
這篇文章主要介紹了Android 下載文件通知欄顯示進(jìn)度條功能的實(shí)例代碼,通過使用AsyncTask異步任務(wù)實(shí)現(xiàn),調(diào)用publishProgress()方法刷新進(jìn)度來實(shí)現(xiàn),具體代碼大家參考下本文2018-04-04