最近google在自己推出的material design中增加了bottom navigation导航控制。android一直没有官方的导航控制器,自己实现确实是五花八门,有了这个规定之后,就类似苹果的底部toolbar,以后我们的app就会有一致的风格,先看一张效果:
这是官方在material design中给出一张图,确实很不错。
1.bottomnavigationbar的下载地址
https://github.com/ashok-varma/bottomnavigation
2.使用的方法
2.1在gradle中添加
compile ‘com.ashokvarma.android:bottom-navigation-bar:0.9.5'
2.2布局实现
1
2
3
4
5
|
<com.ashokvarma.bottomnavigation.bottomnavigationbar android:layout_gravity= "bottom" android:id= "@+id/bottom_navigation_bar" android:layout_width= "match_parent" android:layout_height= "wrap_content" /> |
2.3类中activity中添加bottomnavigationitem
1
2
3
4
5
6
7
8
9
|
bottomnavigationbar bottomnavigationbar = (bottomnavigationbar) findviewbyid(r.id.bottom_navigation_bar); bottomnavigationbar .additem( new bottomnavigationitem(r.drawable.ic_home_white_24dp, "home" )) .additem( new bottomnavigationitem(r.drawable.ic_book_white_24dp, "books" )) .additem( new bottomnavigationitem(r.drawable.ic_music_note_white_24dp, "music" )) .additem( new bottomnavigationitem(r.drawable.ic_tv_white_24dp, "movies & tv" )) .additem( new bottomnavigationitem(r.drawable.ic_videogame_asset_white_24dp, "games" )) .initialise(); |
2.4设置事件监听器tabchangelistener
1
2
3
4
5
6
7
8
9
10
11
|
bottomnavigationbar.settabselectedlistener( new bottomnavigationbar.ontabselectedlistener(){ @override public void ontabselected( int position) { } @override public void ontabunselected( int position) {] } @override public void ontabreselected( int position) { } }); |
3.案例的实现
布局文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
<?xml version= "1.0" encoding= "utf-8" ?> <relativelayout xmlns:android= "http://schemas.android.com/apk/res/android" xmlns:tools= "http://schemas.android.com/tools" xmlns:app= "http://schemas.android.com/apk/res-auto" android:layout_width= "match_parent" android:layout_height= "match_parent" app:layout_behavior= "@string/appbar_scrolling_view_behavior" tools:showin= "@layout/activity_navigation_view_demo" tools:context= "com.lidong.demo.navigation_view.bottomnavigationbardemoactivity" > <linearlayout android:id= "@+id/tb" android:layout_width= "match_parent" android:layout_height= "match_parent" android:orientation= "vertical" /> <com.ashokvarma.bottomnavigation.bottomnavigationbar android:id= "@+id/bottom_navigation_bar" android:layout_width= "match_parent" android:layout_alignparentbottom= "true" android:layout_height= "wrap_content" /> </relativelayout> |
activity的代码:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
|
package com.lidong.demo.navigation_view; import android.app.fragmentmanager; import android.app.fragmenttransaction; import android.os.bundle; import android.support.v7.app.appcompatactivity; import android.support.v7.widget.toolbar; import android.util.log; import com.ashokvarma.bottomnavigation.bottomnavigationbar; import com.ashokvarma.bottomnavigation.bottomnavigationitem; import com.lidong.demo.r; /** * bottomnavigationbar实现 */ public class bottomnavigationbardemoactivity extends appcompatactivity implements bottomnavigationbar.ontabselectedlistener { private bottomnavigationbar bottomnavigationbar; int lastselectedposition = 0 ; private string tag = bottomnavigationbardemoactivity. class .getsimplename(); private locationfragment mlocationfragment; private findfragment mfindfragment; private favoritesfragment mfavoritesfragment; private bookfragment mbookfragment; @override protected void oncreate(bundle savedinstancestate) { super .oncreate(savedinstancestate); setcontentview(r.layout.activity_navigation_view_demo); toolbar toolbar = (toolbar) findviewbyid(r.id.toolbar); setsupportactionbar(toolbar); bottomnavigationbar = (bottomnavigationbar) findviewbyid(r.id.bottom_navigation_bar); bottomnavigationbar .additem( new bottomnavigationitem(r.mipmap.ic_location_on_white_24dp, "位置" ).setactivecolor(r.color.orange)) .additem( new bottomnavigationitem(r.mipmap.ic_find_replace_white_24dp, "发现" ).setactivecolor(r.color.blue)) .additem( new bottomnavigationitem(r.mipmap.ic_favorite_white_24dp, "爱好" ).setactivecolor(r.color.green)) .additem( new bottomnavigationitem(r.mipmap.ic_book_white_24dp, "图书" ).setactivecolor(r.color.blue)) .setfirstselectedposition(lastselectedposition ) .initialise(); bottomnavigationbar.settabselectedlistener( this ); setdefaultfragment(); } /** * 设置默认的 */ private void setdefaultfragment() { fragmentmanager fm = getfragmentmanager(); fragmenttransaction transaction = fm.begintransaction(); mlocationfragment = locationfragment.newinstance( "位置" ); transaction.replace(r.id.tabs, mlocationfragment); transaction.commit(); } @override public void ontabselected( int position) { log.d(tag, "ontabselected() called with: " + "position = [" + position + "]" ); fragmentmanager fm = this .getfragmentmanager(); //开启事务 fragmenttransaction transaction = fm.begintransaction(); switch (position) { case 0 : if (mlocationfragment == null ) { mlocationfragment = locationfragment.newinstance( "位置" ); } transaction.replace(r.id.tb, mlocationfragment); break ; case 1 : if (mfindfragment == null ) { mfindfragment = findfragment.newinstance( "发现" ); } transaction.replace(r.id.tb, mfindfragment); break ; case 2 : if (mfavoritesfragment == null ) { mfavoritesfragment = favoritesfragment.newinstance( "爱好" ); } transaction.replace(r.id.tb, mfavoritesfragment); break ; case 3 : if (mbookfragment == null ) { mbookfragment = bookfragment.newinstance( "图书" ); } transaction.replace(r.id.tb, mbookfragment); break ; default : break ; } // 事务提交 transaction.commit(); } @override public void ontabunselected( int position) { log.d(tag, "ontabunselected() called with: " + "position = [" + position + "]" ); } @override public void ontabreselected( int position) { } } |
fragment的代码
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
45
|
package com.lidong.demo.navigation_view; import android.app.fragment; import android.os.bundle; import android.view.layoutinflater; import android.view.view; import android.view.viewgroup; import android.widget.textview; import com.lidong.demo.r; public class locationfragment extends fragment { public static locationfragment newinstance(string param1) { locationfragment fragment = new locationfragment(); bundle args = new bundle(); args.putstring( "agrs1" , param1); fragment.setarguments(args); return fragment; } public locationfragment() { } @override public void oncreate(bundle savedinstancestate) { super .oncreate(savedinstancestate); } @override public view oncreateview(layoutinflater inflater, viewgroup container, bundle savedinstancestate) { view view = inflater.inflate(r.layout.fragment_location, container, false ); bundle bundle = getarguments(); string agrs1 = bundle.getstring( "agrs1" ); textview tv = (textview)view.findviewbyid(r.id.tv_location); tv.settext(agrs1); return view; } } |
代码下载:https://github.com/lidong1665/androidrapidlibrary
代码实现起来很简单,就加载布局,添加bottomnavigationitem,设置tabchangelistener就这三步搞定底部导航控制器。
以上就是关于bottomnavigationbar底部导航控制器,希望对大家的学习有所帮助。