今天說一下BottomNagivationView基礎(chǔ),先看一下效果圖:

BottomNagivationView是一個(gè)底部導(dǎo)航欄,但是他有item限制,個(gè)數(shù)在3到5個(gè)之間,我今天寫了五個(gè),而且出了一些錯(cuò)誤,百度一下最后得到解決的方法。今天就不說這個(gè)解決方法,但是我會(huì)把這個(gè)代碼分享出來。
創(chuàng)建BottomNagivationView效果的步驟:
1、加載所依賴的庫(kù)文件:implementation? 'com.android.support:design:27.1.1'
2、在res下創(chuàng)建一個(gè)文件夾叫menu里面創(chuàng)建一個(gè) .xml文件,這個(gè)文件是用來設(shè)置底部導(dǎo)航欄的文字(用我的為例子)
這里自己也可以加上圖片,我嫌麻煩就沒用。如果你想加載圖片可以在加上android:icon=“ 圖片的位置 ”;
3、建立主? .xml文件(除了第一個(gè)xmll文件在menu中,其他的都在layout中)。
上面的那個(gè)TextView控件簡(jiǎn)單了,就不用說了,下面的控件就是今天的主角BottomNavigationView,說一下它必須要知道的秘密:itemTextColor——字體的顏色設(shè)置,用selectot可以自己設(shè)置顏色的變化;itemiconTint——圖片的顏色(這里我沒有加圖片,所以就沒有寫);itemBackground——是顏色,如果設(shè)置了就看不到水波紋的效果了(注意:這幾個(gè)控件前面都是app:),如果你想設(shè)置BottomNagivationView的背景顏色可以用android:background=“? ”;
4、建立selectot_bnv.xml,我把它也單獨(dú)放在一個(gè)文件夾(color)下面。
這個(gè)我覺得大家都能看懂吧,我的英語折磨差,當(dāng)我看到checked就知道被點(diǎn)擊到的顏色,當(dāng)然下面就是沒被點(diǎn)擊到的到顏色
5、每次都是把最重要的步驟放在最后?,F(xiàn)在我們開始寫主Activity,這 是用來判斷我們點(diǎn)擊哪個(gè)該出現(xiàn)什么界面。先看代碼:(代碼有點(diǎn)長(zhǎng)我就不截圖了直接在上面寫一些注釋)
```
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);//這里是因?yàn)槲野補(bǔ)ctivity名字換成bottomactivity
mtextview=(TextView)findViewById(R.id.text);//通過ID找到TextView
bottomNavigationView=(BottomNavigationView)findViewById(R.id.bottom_design);
BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);//這段代碼是在網(wǎng)上找的,就是當(dāng)item大于3的時(shí)候必須寫這一段和下面一段,還有第六個(gè)步驟
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {//這是一個(gè)監(jiān)聽器(相當(dāng)于大腦),就是監(jiān)聽我們點(diǎn)擊哪個(gè)item,然后做出相對(duì)性的回應(yīng)
@Override//以后看到這個(gè)標(biāo)志就是下面一行代碼是某個(gè)方法必須實(shí)現(xiàn)的,就是他主動(dòng)填充的。
? ? ? ? ? ? public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()){//相信這個(gè)switch大家都知道——Java基礎(chǔ)
case R.id.add://通過item的ID來實(shí)現(xiàn)界面的轉(zhuǎn)化
mtextview.setText(item.getTitle());//setText()設(shè)置文字,item.getTitle()得到item的Title里面的值其實(shí)這也是Java基礎(chǔ)——哈哈哈哈。
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;//因?yàn)檫@個(gè)方法的返回時(shí)Boolean值,所以要要返回true或false,我個(gè)人覺得true就是可視化,如果你覺得我說的不對(duì),我可以改一下這個(gè)博客。
}
});
}
}
```
6、網(wǎng)上找的代碼:
```
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);
}
}
}
```