Это перенесенная версия Java-версии, которая устарела, и эта проблема была в оригинале.
Обходной путь - удалить значок, когда значение превышает 99, и добавить его снова, вместо того, чтобы просто увеличить счет.
Я не смотрел на версию C #, но предположил, что кодBottomBarBadge.java
- это то же самое, и размер вида значка рассчитывается только один раз при использовании метода attachToTab
.Таким образом, обходной путь работает, так как поток attachToTab/adjustPositionAndSize
вызывается снова, но содержимое значка действительно нужно проверить, чтобы определить, не переполнят ли они круг значков, и повторно вызвать adjustPositionAndSize
, ... я думаю ...; -)
re: https://github.com/roughike/BottomBar/blob/master/bottom-bar/src/main/java/com/roughike/bottombar/BottomBarBadge.java#L94
Обновление:
Существует множество проблем / ошибок при удалении / воссоздании значка и т. Д. В этой библиотеке (которая являетсянемного отличается от оригинальной библиотеки Java).
Хотя это должно быть в самой библиотеке, вы можете сделать это, чтобы правильно изменить размер значка при установке счетчика:
void ResetBadgeCount(BottomBarBadge badge, int count)
{
badge.Count = count;
ViewGroup.LayoutParams lparams;
using (var bounds = new Rect())
{
badge.Paint.GetTextBounds(badge.Text, 0, badge.Text.Length, bounds);
lparams = _badge2.LayoutParameters;
badge.SetSingleLine();
lparams.Width = (int)((bounds.Right - bounds.Left) * 1.25);
}
lparams.Height = lparams.Width;
badge.LayoutParameters = lparams;
}
И вызвать егокаждый раз, когда вы устанавливаете счетчик значков:
ResetBadgeCount(_yourBadgeInstance, 999);
или делаете его методом расширения:
public static class MyExtensions
{
public static void ResetBadgeCount(this BottomBarBadge badge, int count)
{
badge.Count = count;
ViewGroup.LayoutParams lparams;
using (Rect bounds = new Rect())
{
badge.Paint.GetTextBounds(badge.Text, 0, badge.Text.Length, bounds);
badge.SetSingleLine();
lparams = badge.LayoutParameters;
lparams.Width = (int)((bounds.Right - bounds.Left) * 1.25);
}
lparams.Height = lparams.Width;
badge.LayoutParameters = lparams;
}
}
Тогда вы можете просто вызвать его с помощью:
_yourBadgeInstance.ResetBadgeCount(999);
_yourBadgeInstance.ResetBadgeCount(1999);
Чтобы добиться более похожего на WhatsApp вида значков, как на изображении в вопросе (растяните его по ширине, но не увеличивайте высоту), вместо этого вы можете использовать этот код в методе ResetBadgeCount
:
private void ResetBadgeCount(BottomBarBadge badge, int count)
{
badge.Count = count;
ViewGroup.LayoutParams lparams;
using (var bounds = new Rect())
{
badge.Paint.GetTextBounds(badge.Text, 0, badge.Text.Length, bounds);
lparams = badge.LayoutParameters;
badge.SetSingleLine();
lparams.Width = (int)Math.Round(badge.Paint.MeasureText(badge.Text) * 1.25);
var metrics = badge.Paint.GetFontMetrics();
lparams.Height = (int)Math.Round((metrics.Bottom - metrics.Top) * 1.25);
}
if (lparams.Width < lparams.Height)
{
lparams.Width = lparams.Height;
}
badge.LayoutParameters = lparams;
}