網站首頁 編程語言 正文
在這一節中,我們實現一個底層分頁按鈕。
實現這種布局有非常的多的方式,這里我們采用的是RadioGroup
和ViewPager
實現這種界面形式。
ViewPager
中用適配器裝載4個不同的Fragment
,當ViewPager
滑動或者RadioGroup
有點擊的時候,選擇到相應的Fragment
中,進行展示。
這就是我們實現分頁按鈕的思路。
主布局 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="預測" 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
要進行相應的設置,不然RadioButton
可能會點擊不到。
適配器
創建是個不同的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 } }
主頁面的控制
有了前面的準備以后,在主界面中需要設置下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 } } } }
小結
這節應該是我們最后一節寫控件的東西了,控件的東西很多,而且比較難理解,還需要不停的進行學習和總結,我們后面還會有不同的專題來介紹,有時間可以多看看別人寫的控件,來豐富我們做界面的思路路。
原文鏈接:https://blog.csdn.net/weixin_40425640/article/details/127966773
相關推薦
- 2022-09-16 C語言實現階乘的示例詳解_C 語言
- 2023-01-31 iOS?底層alloc?init?new?源碼流程示例分析_IOS
- 2022-07-13 數據結構之冒泡排序
- 2022-02-17 不懂就問:map中使用await為什么會失效?
- 2022-09-27 淺談Redis緩存更新策略_Redis
- 2022-10-14 【Python】pytorch 保存模型、checkpoint
- 2023-05-06 react中axios結合后端實現GET和POST請求方式_React
- 2022-03-04 uniapp上傳圖片視頻uniapp上傳圖片視頻
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支