day03:BottomNagivationView基础

作者: 80b728bf255f | 来源:发表于2018-05-05 18:07 被阅读152次

    今天说一下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);

    }

    }

    }

    ```

    相关文章

      网友评论

      本文标题:day03:BottomNagivationView基础

      本文链接:https://www.haomeiwen.com/subject/vkcerftx.html