BottomNavigationView 添加 badge(氣泡,紅點(diǎn))

一:選取badge庫

這里選用BadgeView作為示例,鏈接地址https://github.com/qstumn/BadgeView

二:android.support.design.widget.BottomNavigationView 代碼簡要分析

1:基本上使用任何badgeview 庫都需要一個(gè)目標(biāo)view。而大部分人認(rèn)為BottomNavigationView中沒有暴露相應(yīng)方法拿到item,所以覺得直接放棄了。

2:其實(shí)通過查看源碼發(fā)現(xiàn),BottomNavigationView最終是通過BottomNavigationMenuView顯示的,而BottomNavigationMenuView內(nèi)部含有一個(gè)R.menu.xxx 的解析器BottomNavigationPresenter,以及一個(gè)BottomNavigationItemView數(shù)組(可以把BottomNavigationItemView簡要理解為BottomNavigationView的每個(gè)按鍵),而且最關(guān)鍵的代碼在于BottomNavigationItemView實(shí)例化:

@Override

public voidinitialize(MenuItemImpl itemData,intmenuType) {

mItemData= itemData;

setCheckable(itemData.isCheckable());

setChecked(itemData.isChecked());

setEnabled(itemData.isEnabled());

setIcon(itemData.getIcon());

setTitle(itemData.getTitle());

setId(itemData.getItemId());

setContentDescription(itemData.getContentDescription());

TooltipCompat.setTooltipText(this, itemData.getTooltipText());

}

其中有一句為?setId(itemData.getItemId());這就意味著,我們從屏幕上看到的每個(gè)按鈕的id,其實(shí)和R.menu.xxx 里設(shè)置的按鈕id是一致的,那接下來就很明朗了,通過findviewbyid,我們就可以拿到這個(gè)按鈕,接著我們就能添加badgele

三:最終效果及代碼

最終效果

暫時(shí)沒有找到上傳文件的地方,把這個(gè)類粘貼出來了,重點(diǎn)部分已經(jīng)加粗,非常的簡單。

public classMainActivityextendsAppCompatActivity {

privateTextViewmTextMessage;

BottomNavigationItemViewitemhome;

BottomNavigationItemViewdashboard;

BottomNavigationItemViewnotifications;

Badgebadge1;

Badgebadge2;

Badgebadge3;

privateBottomNavigationView.OnNavigationItemSelectedListenermOnNavigationItemSelectedListener

=newBottomNavigationView.OnNavigationItemSelectedListener() {

@Override

public booleanonNavigationItemSelected(@NonNullMenuItem item) {

switch(item.getItemId()) {

caseR.id.navigation_home:

mTextMessage.setText(R.string.title_home);

return true;

caseR.id.navigation_dashboard:

mTextMessage.setText(R.string.title_dashboard);

return true;

caseR.id.navigation_notifications:

mTextMessage.setText(R.string.title_notifications);

return true;

}

return false;

}

};

@Override

protected voidonCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

mTextMessage= (TextView) findViewById(R.id.message);

BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);

navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);

itemhome= navigation.findViewById(R.id.navigation_home);

dashboard= navigation.findViewById(R.id.navigation_dashboard);

notifications= navigation.findViewById(R.id.navigation_notifications);

badge1=newQBadgeView(this).bindTarget(itemhome)

.setShowShadow(true)

.setBadgeGravity(Gravity.END|Gravity.TOP)

.setOnDragStateChangedListener(newBadge.OnDragStateChangedListener() {

@Override

public voidonDragStateChanged(intdragState, Badge badge, View targetView) {

}

})

.setBadgeNumber(1);

badge2=newQBadgeView(this).bindTarget(dashboard)

.setShowShadow(true)

.setBadgeGravity(Gravity.END|Gravity.TOP)

.setOnDragStateChangedListener(newBadge.OnDragStateChangedListener() {

@Override

public voidonDragStateChanged(intdragState, Badge badge, View targetView) {

}

})

.setBadgeNumber(2);

badge3=newQBadgeView(this).bindTarget(notifications)

.setShowShadow(true)

.setBadgeGravity(Gravity.END|Gravity.TOP)

.setOnDragStateChangedListener(newBadge.OnDragStateChangedListener() {

@Override

public voidonDragStateChanged(intdragState, Badge badge, View targetView) {

}

})

.setBadgeNumber(3);

}

@Override

public voidonWindowFocusChanged(booleanhasFocus) {

super.onWindowFocusChanged(hasFocus);

intw =itemhome.getMeasuredWidth();

badge1.setGravityOffset((int)(w*0.3),0,false);

badge2.setGravityOffset((int)(w*0.3),0,false);

badge3.setGravityOffset((int)(w*0.3),0,false);

}

}

?著作權(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),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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