我在我的应用程序中使用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
,但我不知道该怎么做。
有没有人做过类似的事情,或者至少能指出我正确的方向?
答案 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);
}