網(wǎng)站首頁 編程語言 正文
Tint 著色器
優(yōu)點:去除“無用”圖片,節(jié)省空間
配合BottomNavigationView,實現(xiàn)一個快速,簡潔的Tab欄
傳統(tǒng)做法:Tab 切換,字體變色、圖片變色。至少給我提供八張圖,四張默認(rèn),四張選中,然后通過 selector 文件設(shè)置
現(xiàn)在BottomNavigationView只需四張圖!!!
依賴(AndroidX)
implementation 'com.google.android.material:material:1.1.0-alpha01'
布局
<?xml version="1.0" encoding="utf-8"?> <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" android:background="@color/white" tools:context=".MainActivity"> <FrameLayout android:id="@+id/fLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@+id/nav_bottom_menu" android:background="@color/bg" /> <View android:layout_width="match_parent" android:layout_height="0.5dp" android:layout_above="@+id/nav_bottom_menu" android:background="#FFE1E0E0" /> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_bottom_menu" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" app:itemBackground="@null" app:itemIconTint="@color/tint_selector_menu_color" app:itemTextColor="@color/tint_selector_menu_color" app:labelVisibilityMode="labeled" app:menu="@menu/nav_bottom_menu" /> <com.makeramen.roundedimageview.RoundedImageView android:layout_width="55dp" android:layout_height="55dp" android:layout_alignParentBottom="true" android:layout_centerInParent="true" android:layout_marginBottom="12dp" android:src="@drawable/ic_log" app:riv_corner_radius="200dp" /> </RelativeLayout>
編寫渲染顏色選擇器-tint_selector_menu_color
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/orange" android:state_checked="true" /> <item android:color="@color/black" /> </selector>
menu 文件中 icon-nav_bottom_menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/iv_home"
android:icon="@drawable/iv_home"
android:title="首頁" />
<item
android:id="@+id/iv_wechat"
android:icon="@drawable/iv_wechat"
android:title="視頻" />
<item
android:id="@+id/riv_script"
android:icon="@null"
android:title="@null" />
<item
android:id="@+id/iv_pipi"
android:icon="@drawable/iv_pipi"
android:title="電影" />
<item
android:id="@+id/iv_mine"
android:icon="@drawable/iv_mine"
android:title="我的" />
</menu>
BottomNavigationView的點擊事件
這里配合Fragmen
/* Menu顯示彩色圖標(biāo) */
//navBottomMenu.setItemIconTintList(null);
/* 導(dǎo)航欄點擊事件 */
navBottomMenu.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.iv_home: {
FragmentManager.startFragmentHome(Fragment_A.class);
return true;
}
case R.id.iv_wechat: {
FragmentManager.startFragmentHome(Fragment_B.class);
return true;
}
case R.id.iv_pipi: {
FragmentManager.startFragmentHome(Fragment_C.class);
return true;
}
case R.id.iv_mine: {
FragmentManager.startFragmentHome(Fragment_D.class);
return true;
}
default:
break;
}
return false;
}
});
配合ViewPager實現(xiàn)Tab欄
/* 限制頁面數(shù),防止界面反復(fù)重新加載 */
viewPager.setOffscreenPageLimit(4);
// ViewPager 滑動事件監(jiān)聽
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int i, float v, int i1) {
}
@Override
public void onPageSelected(int i) {
//這里我做了中間凹凸按鈕,所以要特別處理以下
//如果沒有我這種情況的,直接加上這個 navBottomMenu.getMenu().getItem(i).setChecked(true); 就不用再加switch語句了
switch (i) {
case 0:
//將滑動到的頁面對應(yīng)的 menu 設(shè)置為選中狀態(tài)
navBottomMenu.getMenu().getItem(i).setChecked(true);
break;
case 1:
//將滑動到的頁面對應(yīng)的 menu 設(shè)置為選中狀態(tài)
navBottomMenu.getMenu().getItem(i).setChecked(true);
break;
case 2:
case 3:
//將滑動到的頁面對應(yīng)的 menu 設(shè)置為選中狀態(tài)
navBottomMenu.getMenu().getItem(i + 1).setChecked(true);
break;
default:
break;
}
}
@Override
public void onPageScrollStateChanged(int i) {
}
});
}
對應(yīng)的適配器
(僅供參考,大家也可以去參考以下別人寫的代碼)
public class FragPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> fragmentList;
public FragPagerAdapter(@NonNull FragmentManager fm, List<Fragment> fragmentList) {
super(fm);
this.fragmentList = fragmentList;
}
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
}
BottomNavigationView實現(xiàn)的Tab欄,比自己以前寫的代碼更加簡潔明了!!!
原文鏈接:https://blog.csdn.net/qq_40945489/article/details/110959289
相關(guān)推薦
- 2022-06-22 C++深度探索運算符重載和返回值優(yōu)化_C 語言
- 2022-09-18 C#面向?qū)ο缶幊讨幸蕾嚪崔D(zhuǎn)原則的示例詳解_C#教程
- 2023-12-02 浮動清除通用代碼
- 2022-03-26 C語言goto語句簡單使用詳解_C 語言
- 2022-09-20 C#使用winform實現(xiàn)進度條效果_C#教程
- 2022-07-13 Docker技術(shù)_Docker與傳統(tǒng)虛擬機以及傳統(tǒng)容器的差異
- 2022-09-21 Python時間序列數(shù)據(jù)的預(yù)處理方法總結(jié)_python
- 2022-11-06 React?hook實現(xiàn)簡單的websocket封裝方式_React
- 最近更新
-
- 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之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- 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同步修改后的遠程分支