android底部导航栏凹凸设计,快速实现底部导航栏

Tint 着色器

优点:去除“无用”图片,节省空间

配合BottomNavigationView,实现一个快速,简洁的Tab栏,效果图如下

传统做法:Tab 切换,字体变色、图片变色。至少给我提供八张图,四张默认,四张选中,然后通过 selector 文件设置

现在BottomNavigationView只需四张图!!!

1096a1bb2078598bd2ad7add1f2618f2.png

3faf76b69902494f97bcd14fb7489d53.png

依赖(AndroidX)

implementation 'com.google.android.material:material:1.1.0-alpha01'1

布局

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

编写渲染颜色选择器-tint_selector_menu_color

1

2

3

4

5

menu 文件中 icon-nav_bottom_menu

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

BottomNavigationView的点击事件(这里配合Fragmen)

/* Menu显示彩色图标 */ //navBottomMenu.setItemIconTintList(null);

/* 导航栏点击事件 */ 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; } });1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

下面是配合ViewPager实现Tab栏

// ViewPager 滑动事件监听 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: //将滑动到的页面对应的 menu 设置为选中状态 navBottomMenu.getMenu().getItem(i).setChecked(true); break; case 1: //将滑动到的页面对应的 menu 设置为选中状态 navBottomMenu.getMenu().getItem(i).setChecked(true); break; case 2: case 3: //将滑动到的页面对应的 menu 设置为选中状态 navBottomMenu.getMenu().getItem(i + 1).setChecked(true); break; default: break; } } @Override public void onPageScrollStateChanged(int i) { } }); }1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

对应的适配器(随便写的,大家也可以去参考以下别人写的代码)

public class FragPagerAdapter extends FragmentPagerAdapter { private List fragmentList; public FragPagerAdapter(@NonNull FragmentManager fm, List fragmentList) { super(fm); this.fragmentList = fragmentList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); }

}1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

BottomNavigationView实现的Tab栏,比自己以前写的代码更加简洁明了!!!

文章来源: blog.youkuaiyun.com,作者:ZH-黑夜,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.youkuaiyun.com/qq_40945489/article/details/110959289

Vue镂空凹凸底部导航栏是一种常见的UI设计风格,它通过使用不同的背景颜色和形状来突出显示导航栏的选中状态。通常,底部导航栏由多个导航项组成,每个导航项都有一个图标和一个文本标签。 在Vue中实现镂空凹凸底部导航栏可以通过以下步骤: 1. 创建一个Vue组件来表示底部导航栏,可以使用`<router-link>`组件来实现导航功能。 2. 使用CSS样式来设置底部导航栏的背景颜色和形状。可以使用`border-radius`属性来设置凹凸效果,使用`box-shadow`属性来设置阴影效果。 3. 使用Vue的动态绑定功能来实现选中状态的切换。可以通过给选中的导航项添加一个特定的CSS类来改变其样式。 以下是一个简单的示例代码: ```html <template> <div class="bottom-nav"> <router-link to="/" class="nav-item" :class="{ active: activeTab === 'home' }"> <i class="icon-home"></i> <span>首页</span> </router-link> <router-link to="/category" class="nav-item" :class="{ active: activeTab === 'category' }"> <i class="icon-category"></i> <span>分类</span> </router-link> <router-link to="/cart" class="nav-item" :class="{ active: activeTab === 'cart' }"> <i class="icon-cart"></i> <span>购物车</span> </router-link> <router-link to="/profile" class="nav-item" :class="{ active: activeTab === 'profile' }"> <i class="icon-profile"></i> <span>个人中心</span> </router-link> </div> </template> <script> export default { data() { return { activeTab: 'home' // 默认选中的导航项 }; } }; </script> <style> .bottom-nav { display: flex; justify-content: space-around; align-items: center; background-color: #fff; border-top: 1px solid #ccc; } .nav-item { display: flex; flex-direction: column; align-items: center; padding: 10px; color: #999; } .nav-item.active { color: #333; } .icon-home, .icon-category, .icon-cart, .icon-profile { /* 设置导航项的图标样式 */ } </style> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值