为什么将徽章添加到菜单项时我的应用程序图标会闪烁

时间:2018-07-24 07:10:24

标签: android

private BitmapDrawable buildCounterDrawable(int count, int backgroundImageId) {
        LayoutInflater inflater = LayoutInflater.from(this);
        @SuppressLint("InflateParams") final View view = inflater.inflate(R.layout.menuitem_layout, null);
        view.setBackgroundResource(backgroundImageId);

        if (count == 0) {
            View counterTextPanel = view.findViewById(R.id.counterValuePanel);
            counterTextPanel.setVisibility(View.GONE);
        } else {
            TextView textView = (TextView) view.findViewById(R.id.count);
            textView.setText("" + count);
        }
        view.measure(
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));
        view.layout(0, 0, view.getMeasuredWidth(), view.getMeasuredHeight());
        view.setDrawingCacheEnabled(true);
        view.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
        Bitmap bitmap = Bitmap.createBitmap(view.getDrawingCache());
        view.setDrawingCacheEnabled(false);
return new BitmapDrawable(getResources(), bitmap);
    }

我使用上面的代码在应用程序的菜单项中添加了徽章,计数可见但图标却闪闪了为什么?

之前:

enter image description here

图像是这样的:

enter image description here

1 个答案:

答案 0 :(得分:1)

为什么要在Java代码中设置可绘制的位图。我实际上具有与在XML中最初设置为ImageView的{​​{1}}中使用徽章实现的功能相同的功能,并且当有通知或您要查找的任何事件时,只需将其可见性设置为invisible

示例:(在VISIBLE中实现):

ConstraintLayout

以上XML在 <ImageView android:id="@+id/iv_notifications" android:visibility="invisible" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_notifications" app:layout_constraintRight_toLeftOf="parent" app:layout_constraintTop_toBottomOf="parent" android:layout_marginEnd="@dimen/margin_padding_size_medium" /> <ImageView android:id="@+id/iv_notif_dot" app:layout_constraintTop_toTopOf="@id/iv_notifications" app:layout_constraintRight_toRightOf="@id/iv_notifications" android:background="@drawable/circle_purple_opaque_white_outline" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="invisible" /> 中具有其根布局,但是您也可以使用ConstraintLayout来将徽章图标固定在图标的顶部或右上角。要仅限制在顶部,您可以删除以下行:RelativeLayout

这样,您的Java代码更干净,您会获得所需的UI。让我知道您是否需要进一步的解释。