今天说一下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);
}
}
}
```
网友评论