網(wǎng)站首頁 編程語言 正文
在這一節(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é),我們后面還會有不同的專題來介紹,有時間可以多看看別人寫的控件,來豐富我們做界面的思路路。
原文鏈接:https://blog.csdn.net/weixin_40425640/article/details/127966773
相關(guān)推薦
- 2022-07-12 linux中的火墻策略優(yōu)化
- 2023-07-04 解決Uncaught (in promise) TypeError: Cannot read pro
- 2022-10-17 shell腳本的流程控制語句的實現(xiàn)_linux shell
- 2022-05-02 ASP.NET?Core中間件實現(xiàn)限流的代碼_實用技巧
- 2022-12-04 pytorch從頭開始搭建UNet++的過程詳解_相關(guān)技巧
- 2022-05-20 Kafka 認證登錄注意事項
- 2022-08-20 python?memory_profiler庫生成器和迭代器內(nèi)存占用的時間分析_python
- 2023-04-10 pytest?用例執(zhí)行失敗后其他不再執(zhí)行_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支