<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
android:id="@+id/navigation_news"
android:icon="@drawable/main_news"
android:title="@string/main_title_news" />
android:id="@+id/navigation_sight"
android:icon="@drawable/main_sight"
android:title="@string/main_title_sight" />
android:id="@+id/navigation_topic"
android:icon="@drawable/main_topic"
android:title="@string/main_title_topic" />
android:id="@+id/navigation_my"
android:icon="@drawable/main_my"
android:title="@string/main_title_my" />
</menu>
然后在drawable下边建四个icon的xml文件如下:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/main_news_s" android:state_checked="true"/>
<item android:drawable="@drawable/main_news_n"/>
</selector>
在此只列出一个main_news.xml其余类似只修改选中图标和非选中图标即可。
此时图标切换不是自己设置选中和未选中图标,因为BottomNavigationView自带图标切换颜色风格,如何去掉呢?
java代码:
main_ac_bottomNavigationView.setItemIconTintList(null) ;
kotlin代码:
main_ac_bottomNavigationView?.itemIconTintList=null
2.在布局中使用BottomNavigationView
在app文件夹下的build.gradle加入design包
implementation 'com.android.support:design:28.0.0'
布局直接上代码:
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/main_ac_bottomNavigationView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:menu="@menu/navigation"
app:itemIconSize="20dp"
app:labelVisibilityMode="labeled"
app:itemTextColor="@color/main_bnv_text"/>
其中app:menu="@menu/navigation"引用上面标题1中的第一段代码,切换图标的menu菜单;
其中app:itemIconSize="20dp"设置底部四个导航图标的大小;
其中app:labelVisibilityMode="labeled"设置选中一个tab标签时, 不要有图标变大的效果,其他效果自己验证;
其中app:itemTextColor="@color/main_bnv_text"设置后不切换标题字体颜色,默认会切换标题字体颜色。
3.自定义标题字体大小和图标与标题间距
在BottomNavigationItemView类中, 发现每个item的布局加载:
LayoutInflater.from(context).inflate(layout.design_bottom_navigation_item, this, true);
我们可以自定义这个布局, 替换原始实现, 从而随意的定制自己的UI.
在layout布局文件中必须以design_bottom_navigation_item.xml新建文件替换BottomNavigationView中的item布局,
也可参照谷歌的布局文件自定义:
https://github.com/dandar3/android-support-design/blob/master/res/layout
design_bottom_navigation_item.xml的代码如下:
<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:override="true">
<ImageView
android:id="@+id/icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/design_bottom_navigation_margin"
android:layout_marginBottom="@dimen/design_bottom_navigation_margin"
android:duplicateParentState="true" />
<TextView
android:id="@+id/smallLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="0dp"
android:duplicateParentState="true"
android:textSize="12sp"
android:text="small" />
<TextView
android:id="@+id/largeLabel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom|center_horizontal"
android:layout_marginBottom="0dp"
android:duplicateParentState="true"
android:textSize="24sp"
android:text="large"
android:visibility="invisible" />
</merge>
在代码中我们可以设置图标上下间距,也可以使用 android:layout_marginTop="@dimen/design_bottom_navigation_margin"默认上丢外边距,除此之外我们也可以设置字体大小,标题字体用了一大一小两个TextView,切换图标会看出选中标题变大,如果设置两个textSize相等则切换标题字体大小不变。
4.设置BottomNavigationView点击事件
备注kotlin代码如下:
class MainActivity : BaseActivity(), BottomNavigationView.OnNavigationItemSelectedListener
private fun initView() {
val main_ac_bottomNavigationView = findViewById<BottomNavigationView>(R.id.main_ac_bottomNavigationView)
main_ac_bottomNavigationView?.itemIconTintList=null
main_ac_bottomNavigationView?.setOnNavigationItemSelectedListener(this)
override fun onNavigationItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.navigation_news -> {
// loadFragment {}
R.id.navigation_sight -> {
R.id.navigation_topic -> {
R.id.navigation_my -> {
return true
第一次发表文章,希望大家关注下,后期会加入更多技术干货,如有错误和引用不当请与我联系或留言。
先贴上效果图:谷歌原始代码出来是这样的:官方的风格不是我们设计的风格,我也想直接使用得了,奈何不符合设计要求。1.点击切换图标设置在res文件夹下新建文件夹menu,并在menu下面建一个navigation.xml如下:<?xml version="1.0" encoding="utf-8"?><menu xmlns:android...
1:app\build.gradle中添加依赖:
android x :
implementation 'androidx.appcompat:appcompat:1.1.0'
非android x(注意版本号对应) :
implementation 'com.android.support:design:28.0.0'
2:MainActivity:
public class MainActivity extends AppCompatActivity implements BottomNavigationView.OnNavigation
compile 'com.android.support:design:26.1.0'
2.在activity_main.xml中添加BottomNavigationView控件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.andr...
在开发中,底部导航栏十分常见。一般来说,我们可以自己组合控件实现,比如LinearLayout + TextView(使用android:drawableTop属性+selector状态切换)、RadioGroup + RadioButton等等组合控件的方法自定义实现复杂效果。而BottomNavigationView控件也是一种不错的选择。
二、基本使用
<LinearLayout
xmlns:android="http://schemas.android.com/apk/re
一,基本用法
1,首先需要添加依赖:
implementation 'com.google.android.material:material:1.1.0'
2,布局文件中引入:
<com.google.android.material.bottomnavigation...
步骤一:在菜单文件中定义底部导航菜单选项内容
1.1 新建menu文件menu_bottom_nav.xml(src/main/res/menu/menu_bottom_nav.xml)
1.2 构建menu_bottom_nav.xml(src/main/res/menu/menu_bottom_nav.xml)内容
<?xml version="1.0" encoding="utf-8"?>
底部导航栏的使用比较常见,目前常用的APP几乎都是使用底部导航栏将内容分类,
这个Android 的底部导航栏 BottomNavigationView由Google官方推荐的,
先来看看案例效果图
```xml
<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_navigation_menu" />
2. 创建一个菜单文件(menu),其中包含底部导航栏中的所有菜单项。例如:
```xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
android:id="@+id/menu_home"
android:icon="@drawable/ic_home"
android:title="@string/home"
app:showAsAction="ifRoom" />
android:id="@+id/menu_search"
android:icon="@drawable/ic_search"
android:title="@string/search"
app:showAsAction="ifRoom" />
android:id="@+id/menu_notifications"
android:icon="@drawable/ic_notifications"
android:title="@string/notifications"
app:showAsAction="ifRoom" />
android:id="@+id/menu_profile"
android:icon="@drawable/ic_profile"
android:title="@string/profile"
app:showAsAction="ifRoom" />
</menu>
3. 在Activity中设置底部导航栏的监听器,并在回调函数中处理每个菜单项的点击事件。例如:
```java
public class MainActivity extends AppCompatActivity {
private BottomNavigationView bottomNavigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_home:
// Handle home menu item click
return true;
case R.id.menu_search:
// Handle search menu item click
return true;
case R.id.menu_notifications:
// Handle notifications menu item click
return true;
case R.id.menu_profile:
// Handle profile menu item click
return true;
default:
return false;
这些步骤将帮助您在Android Studio中创建一个基本的底部导航栏。当然,您可以根据自己的需求进行定制和修改。
CSDN-Ada助手:
使用Google的BottomNavigationView自定义底部导航栏
使用Google的BottomNavigationView自定义底部导航栏
wangchangsheng0
使用Google的BottomNavigationView自定义底部导航栏
塔塔西亚: