day03:BottomNagivationView基礎(chǔ)

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

}

}

}

```

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本人初學(xué)Android,最近做了一個(gè)實(shí)現(xiàn)安卓簡(jiǎn)單音樂播放功能的播放器,收獲不少,于是便記錄下來自己的思路與知識(shí)總結(jié)...
    落日柳風(fēng)閱讀 19,450評(píng)論 2 41
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,029評(píng)論 25 709
  • ¥開啟¥ 【iAPP實(shí)現(xiàn)進(jìn)入界面執(zhí)行逐一顯】 〖2017-08-25 15:22:14〗 《//首先開一個(gè)線程,因...
    小菜c閱讀 7,328評(píng)論 0 17
  • 由于app有網(wǎng)頁(yè),同步登陸狀態(tài)。 記得每次的key-value都要分開setCookie(),我也不知道怎么回事,先記錄
    eveo閱讀 1,898評(píng)論 0 0
  • 腦卒中又稱“中風(fēng)”、“腦血管意外”。是一種急性腦血管疾病,是由于腦部血管突然破裂或因血管阻塞導(dǎo)致血液不能流入大腦而...
    晨光康復(fù)閱讀 1,215評(píng)論 0 1

友情鏈接更多精彩內(nèi)容