day03:BottomNagivationView基础

今天说一下BottomNagivationView基础,先看一下效果图:


BottomNagivationView是一个底部导航栏,但是他有item限制,个数在3到5个之间,我今天写了五个,而且出了一些错误,百度一下最后得到解决的方法。今天就不说这个解决方法,但是我会把这个代码分享出来。

创建BottomNagivationView效果的步骤:

1、加载所依赖的库文件:implementation  'com.android.support:design:27.1.1'

2、在res下创建一个文件夹叫menu里面创建一个 .xml文件,这个文件是用来设置底部导航栏的文字(用我的为例子)

这里自己也可以加上图片,我嫌麻烦就没用。如果你想加载图片可以在加上android:icon=“ 图片的位置 ”;

3、建立主  .xml文件(除了第一个xmll文件在menu中,其他的都在layout中)。

上面的那个TextView控件简单了,就不用说了,下面的控件就是今天的主角BottomNavigationView,说一下它必须要知道的秘密:itemTextColor——字体的颜色设置,用selectot可以自己设置颜色的变化;itemiconTint——图片的颜色(这里我没有加图片,所以就没有写);itemBackground——是颜色,如果设置了就看不到水波纹的效果了(注意:这几个控件前面都是app:),如果你想设置BottomNagivationView的背景颜色可以用android:background=“  ”;

4、建立selectot_bnv.xml,我把它也单独放在一个文件夹(color)下面。


这个我觉得大家都能看懂吧,我的英语折磨差,当我看到checked就知道被点击到的颜色,当然下面就是没被点击到的到颜色

5、每次都是把最重要的步骤放在最后。现在我们开始写主Activity,这 是用来判断我们点击哪个该出现什么界面。先看代码:(代码有点长我就不截图了直接在上面写一些注释)

```

package com.example.jiangyou.fristapp;

import android.os.Bundle;

import android.support.annotation.NonNull;

import android.support.annotation.Nullable;

import android.support.design.widget.BottomNavigationView;

import android.support.v7.app.AppCompatActivity;

import android.view.MenuItem;

import android.widget.TextView;

public class BottomActivityextends AppCompatActivity {

TextView  mtextview;//初始化TextView

private BottomNavigationViewbotto  mNavigationView;

@Override

    protected void onCreate(@Nullable Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.bottomactivity);//这里是因为我把activity名字换成bottomactivity

mtextview=(TextView)findViewById(R.id.text);//通过ID找到TextView

bottomNavigationView=(BottomNavigationView)findViewById(R.id.bottom_design);

BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);//这段代码是在网上找的,就是当item大于3的时候必须写这一段和下面一段,还有第六个步骤

bottomNavigationView.setOnNavigationItemSelectedListener(

new BottomNavigationView.OnNavigationItemSelectedListener() {//这是一个监听器(相当于大脑),就是监听我们点击哪个item,然后做出相对性的回应

@Override//以后看到这个标志就是下面一行代码是某个方法必须实现的,就是他主动填充的。

            public boolean onNavigationItemSelected(@NonNull MenuItem item) {

switch (item.getItemId()){//相信这个switch大家都知道——Java基础

case R.id.add://通过item的ID来实现界面的转化

mtextview.setText(item.getTitle());//setText()设置文字,item.getTitle()得到item的Title里面的值其实这也是Java基础——哈哈哈哈。

break;

case R.id.first:

mtextview.setText(item.getTitle());

break;

case R.id.two:

mtextview.setText(item.getTitle());

break;

case R.id.three:

mtextview.setText(item.getTitle());

break;

case R.id.me:

mtextview.setText(item.getTitle());

break;

}

return true;//因为这个方法的返回时Boolean值,所以要要返回true或false,我个人觉得true就是可视化,如果你觉得我说的不对,我可以改一下这个博客。

}

});

}

}

```

6、网上找的代码:

```

package com.example.jiangyou.fristapp;

import android.annotation.SuppressLint;

import android.support.design.internal.BottomNavigationItemView;

import android.support.design.internal.BottomNavigationMenuView;

import android.support.design.widget.BottomNavigationView;

import android.util.Log;

import java.lang.reflect.Field;

public class BottomNavigationViewHelper {

@SuppressLint("RestrictedApi")

public static void disableShiftMode(BottomNavigationView view) {

BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);

try {

Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode");

shiftingMode.setAccessible(true);

shiftingMode.setBoolean(menuView,false);

shiftingMode.setAccessible(false);

for (int i =0; i < menuView.getChildCount(); i++) {

BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);

//noinspection RestrictedApi

                item.setShiftingMode(false);

// set once again checked value, so view will be updated

//noinspection RestrictedApi

                item.setChecked(item.getItemData().isChecked());

}

}catch (NoSuchFieldException e) {

Log.e("BNVHelper","Unable to get shift mode field", e);

}catch (IllegalAccessException e) {

Log.e("BNVHelper","Unable to change value of shift mode", e);

}

}

}

```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本人初学Android,最近做了一个实现安卓简单音乐播放功能的播放器,收获不少,于是便记录下来自己的思路与知识总结...
    落日柳风阅读 19,515评论 2 41
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 180,100评论 25 708
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 7,489评论 0 17
  • 由于app有网页,同步登陆状态。 记得每次的key-value都要分开setCookie(),我也不知道怎么回事,先记录
    eveo阅读 1,911评论 0 0
  • 脑卒中又称“中风”、“脑血管意外”。是一种急性脑血管疾病,是由于脑部血管突然破裂或因血管阻塞导致血液不能流入大脑而...
    晨光康复阅读 1,229评论 0 1

友情链接更多精彩内容