QuickContactBadge叠加

时间:2013-02-09 14:38:36

标签: android quickcontactbadge

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

但是,徽章在右下角显示一个小叠加层。我想它是指示它是QuickContactBadge而不只是一张图片。我对此完全没问题,因为我在我的应用中使用Holo.Light,联系人徽章会显示 dark 叠加层。例如,在具有Holo.Dark的股票拨号器中,叠加层很轻。

我理解这个的原因,但是在大多数联系人照片上,黑暗叠加层只是丑陋,而灯光覆盖层适用于大多数。

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

查看QuickContactBadge的Android来源,叠加层的Drawable 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,但是当我尝试扩展此徽章时,我遇到了必须访问内部Android资源的问题,我不能这样做。

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

有没有人做过类似的事情,或者至少能指出我正确的方向?

2 个答案:

答案 0 :(得分:2)

尝试使用ImageView而不是QuickContactBadge

答案 1 :(得分:1)

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

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

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    contactBadge.setOverlay(null);
}