Kotlin RadioGroup與ViewPager實現(xiàn)底層分頁按鈕方法
在這一節(jié)中,我們實現(xiàn)一個底層分頁按鈕。
實現(xiàn)這種布局有非常的多的方式,這里我們采用的是RadioGroup
和ViewPager
實現(xiàn)這種界面形式。
ViewPager
中用適配器裝載4個不同的Fragment
,當(dāng)ViewPager
滑動或者RadioGroup
有點擊的時候,選擇到相應(yīng)的Fragment
中,進行展示。
這就是我們實現(xiàn)分頁按鈕的思路。
主布局 activity_main
在主布局中,我們使用了 4個的RadioButton
放在一組 RadioGroup
中,使得layout_alignParentBottom
為真,讓他一直放在界面的底部。
一個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ù)測" 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="個人中心" 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
要進行相應(yīng)的設(shè)置,不然RadioButton
可能會點擊不到。
適配器
創(chuàng)建是個不同的Fragment
分別為 HomeFragment
、QueryFragment
、PredictFragment
、UserFragment
。
把適配器中,加載進 這四個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 } }
主頁面的控制
有了前面的準備以后,在主界面中需要設(shè)置下ViewPager
和 RadioButton
使得 程序的點擊事件和滾動事件,確定我們選定的界面。
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é)寫控件的東西了,控件的東西很多,而且比較難理解,還需要不停的進行學(xué)習(xí)和總結(jié),我們后面還會有不同的專題來介紹,有時間可以多看看別人寫的控件,來豐富我們做界面的思路路。
到此這篇關(guān)于Kotlin RadioGroup與ViewPager實現(xiàn)底層分頁按鈕方法的文章就介紹到這了,更多相關(guān)Kotlin底層分頁按鈕內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android 自定義view實現(xiàn)TopBar效果
這篇文章主要為大家詳細介紹了Android 自定義view實現(xiàn)TopBar效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-09-09Android編程實現(xiàn)簡單的UDP Client實例
這篇文章主要介紹了Android編程實現(xiàn)簡單的UDP Client,結(jié)合實例形式分析了Android實現(xiàn)UDP Clinet客戶端的實現(xiàn)技巧,需要的朋友可以參考下2016-04-04Android Studio 升級到3.0 提示 java.lang.NoClassDefFoundError的解決方法
這篇文章主要介紹了Android Studio 升級到3.0 提示 java.lang.NoClassDefFoundError的解決方法,需要的朋友可以參考下2017-12-12Android實現(xiàn)從緩存中讀取圖片與異步加載功能類
這篇文章主要介紹了Android實現(xiàn)從緩存中讀取圖片與異步加載功能類,涉及Android針對緩存的操作及圖片異步加載相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2016-08-08Android利用WindowManager生成懸浮按鈕及懸浮菜單
這篇文章主要為大家詳細介紹了Android利用WindowManager生成懸浮按鈕及懸浮菜單,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-01-01