手机移动程序开发安卓资源收集安卓开发

BottomNavigationView 添加 badge(气泡

2017-11-23  本文已影响244人  Macchiatto_6f56

一:选取badge库

这里选用BadgeView作为示例,链接地址https://github.com/qstumn/BadgeView

二:android.support.design.widget.BottomNavigationView 代码简要分析

1:基本上使用任何badgeview 库都需要一个目标view。而大部分人认为BottomNavigationView中没有暴露相应方法拿到item,所以觉得直接放弃了。

2:其实通过查看源码发现,BottomNavigationView最终是通过BottomNavigationMenuView显示的,而BottomNavigationMenuView内部含有一个R.menu.xxx 的解析器BottomNavigationPresenter,以及一个BottomNavigationItemView数组(可以把BottomNavigationItemView简要理解为BottomNavigationView的每个按键),而且最关键的代码在于BottomNavigationItemView实例化:

@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());这就意味着,我们从屏幕上看到的每个按钮的id,其实和R.menu.xxx 里设置的按钮id是一致的,那接下来就很明朗了,通过findviewbyid,我们就可以拿到这个按钮,接着我们就能添加badgele

三:最终效果及代码

最终效果

暂时没有找到上传文件的地方,把这个类粘贴出来了,重点部分已经加粗,非常的简单。

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);

}

}

上一篇 下一篇

猜你喜欢

热点阅读