2

我在我的应用程序中使用 QuickContactBadge,它运行良好。

但是,徽章在右下角显示了一个小的叠加层。我想它在那里表明它是一张QuickContactBadge图片,而不仅仅是一张图片。我对此完全没问题,但是,由于我Holo.Light在我的应用程序中使用,联系人徽章显示为黑色覆盖。例如,在带有 的股票拨号器中Holo.Dark,覆盖层很浅。

我理解这样做的原因,但是在大多数联系人照片上,深色叠加层很难看,而浅色叠加层对大多数人都有效。

那么,我怎样才能覆盖覆盖,并强制徽章显示光(即 for Holo.Dark)覆盖?

查看 Android 源代码QuickContactBadgeDrawable覆盖层的mOverlay, 是私有的,因此无法从我的应用程序直接访问。在Drawable构造函数中设置:

public QuickContactBadge(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    TypedArray styledAttributes = mContext.obtainStyledAttributes(R.styleable.Theme);
    mOverlay = styledAttributes.getDrawable(
            com.android.internal.R.styleable.Theme_quickContactBadgeOverlay);
    styledAttributes.recycle();

    mQueryHandler = new QueryHandler(mContext.getContentResolver());
    setOnClickListener(this);
}

我假设我必须扩展整个QuickContactBadge类来解决这个问题,但我对 Android 和 Java 都很陌生,所以我不知道如何做到这一点。我之前已经扩展ListAdapter了 s,但是当我尝试扩展这个徽章时,我遇到了必须访问内部 Android 资源的问题,而我不能。

我能想到的另一个解决方案是“欺骗”我正在使用的徽章,Holo.Dark但我不知道该怎么做。

有没有人做过类似的事情,或者至少可以为我指明正确的方向?

4

2 回答 2

2

尝试使用 ImageView 而不是 QuickContactBadge

于 2013-03-15T09:49:41.453 回答
1

在 SDK 21 中,Google 添加了一个setOverlay(Drawable drawable)方法。

它接受 null,因此隐藏装饰器并保留 QuickContactBadge 功能的另一个选项是:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    contactBadge.setOverlay(null);
}
于 2015-08-04T20:15:02.427 回答