我在我的应用程序中使用了一个QuickContactBadge,它运行得很好。
然而,徽章显示一个小的覆盖在右下角。我认为它的存在是为了表明它是一个QuickContactBadge,而不仅仅是一张图片。我完全同意这一点,然而,由于我使用的Holo.Light在我的应用程序,联系徽章显示一个黑暗的覆盖。例如,在带有Holo.Dark的股票拨号器中,覆盖层很轻。
我理解这方面的理由,但黑暗覆盖只是丑陋之上的大多数接触照片,而光覆盖工作对大多数。
那么,我如何才能覆盖覆盖层,并强制徽章显示光(即用于Holo.Dark)覆盖?
看看QuickContactBadge的安卓源代码,覆盖的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的徽章,但我不知道如何做到这一点。
有没有人做过类似的事情,或者至少能为我指明正确的方向?
发布于 2013-03-15 09:49:41
尝试使用ImageView而不是QuickContactBadge
发布于 2015-08-04 20:15:02
在SDK 21中,谷歌添加了一个setOverlay(Drawable drawable)方法。
它接受null,因此隐藏装饰器并保持QuickContactBadge功能的另一个选项是:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
contactBadge.setOverlay(null);
}https://stackoverflow.com/questions/14789194
复制相似问题