2013-02-09 21 views
2

我在我的應用程序中使用QuickContactBadge,它很好地工作。QuickContactBadge覆蓋

但是,徽章在右下角顯示一個小覆蓋。我想這是表明它是一個QuickContactBadge而不僅僅是一張圖片。我對此完全沒問題,但是,由於我在我的應用程序中使用Holo.Light,聯繫人徽章顯示黑色疊加層。例如,在Holo.Dark的股票撥號器中,覆蓋層很輕。

我明白這樣的理由,但是在大多數聯繫照片上,黑色覆蓋層只是醜陋的,而光線覆蓋層對大多數人來說都適用。

那麼,我怎麼能覆蓋覆蓋,並強制徽章顯示光(即Holo.Dark)覆蓋?

查看Android源代碼QuickContactBadge,覆蓋的DrawablemOverlay是私有的,因此無法從我的應用直接訪問。該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

嘗試用ImageView的,而不是QuickContactBadge

+0

如何獲得訪問使用ImageView的聯繫徽章? – erikh 2013-03-17 17:03:54

+0

我最終走了這條路。感謝您的建議! – erikh 2013-04-01 15:51:26

1

在SDK 21谷歌增加了setOverlay(Drawable drawable)方法。

它接受空,那麼另一個選擇隱藏裝飾,並保持QuickContactBadge功能:

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