未显示 MaterialButton 上的 BadgeDrawable

Posted

技术标签:

【中文标题】未显示 MaterialButton 上的 BadgeDrawable【英文标题】:BadgeDrawable on MaterialButton not shown 【发布时间】:2020-04-10 02:30:33 【问题描述】:

我尝试向 MaterialButton 添加一个简单的 BadgeDrawable,但没有显示徽章。

我在 build.gradle 中尝试过以下版本: 'com.google.android.material:material:1.2.0-alpha02' 和 'com.google.android.material:material:1.1.0-alpha06' 。

代码或多或少:

private void addBadgeFor(MaterialButton button, int count) 
    if (count > 0) 
        final BadgeDrawable badge = BadgeDrawable.create(getContext());
        badge.setNumber(count);
        badge.setBackgroundColor(getActivity().getResources().getColor(R.color.badgeBackground));
        badge.setBadgeTextColor(getActivity().getResources().getColor(R.color.badgeText));
        BadgeUtils.attachBadgeDrawable(badge, button, null);
    

我试过有/没有颜色。 minSdk 为 24,目标为 29。

有谁知道 MaterialButton 是否支持 BadgeDrawable?

【问题讨论】:

【参考方案1】:

您可以在布局中使用:

<FrameLayout
    android:id="@+id/layout"
    android:clipChildren="false"
    android:clipToPadding="false">

  <com.google.android.material.button.MaterialButton
      android:id="@+id/button"
      ../>

</FrameLayout>

然后在您的代码中,您可以将BadgeDrawable 应用于:

    MaterialButton button = findViewById(R.id.button);

    button.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() 
        @Override
        public void onGlobalLayout() 
            BadgeDrawable badgeDrawable = BadgeDrawable.create(MainActivity.this);
            badgeDrawable.setNumber(9);
            
            BadgeUtils.attachBadgeDrawable(badgeDrawable, button, findViewById(R.id.layout));
            button.getViewTreeObserver().removeOnGlobalLayoutListener(this);
        
    );

【讨论】:

以上是关于未显示 MaterialButton 上的 BadgeDrawable的主要内容,如果未能解决你的问题,请参考以下文章

无法更改 MaterialButton 上的背景颜色而不更改 colorAccent

材质按钮未正确显示在预览中

android material design 风格组件(MaterialButton,MaterialButtonToggleGroup,Chip,ChipGroup)大汇总.

MaterialButton 内的颤振容器宽度

MaterialButton 与 Button 的大小差异

Android iconGravity 不适用于具有 CircularProgressIndicator 的 MaterialButton