2

アプリで QuickContactBadge を使用していますが、うまく機能します。

ただし、バッジの右下隅に小さなオーバーレイが表示されます。QuickContactBadge単なる写真ではなく、写真であることを示すためにあると思います。これで問題ありませんがHolo.Light、アプリで使用しているため、連絡先バッジに暗いオーバーレイが表示されます。たとえば、 のストック ダイヤラでHolo.Darkは、オーバーレイは明るいです。

私はこれの理由を理解していますが、暗いオーバーレイはほとんどの連絡先の写真の上では醜いだけですが、明るいオーバーレイはほとんどの場合機能します.

では、オーバーレイをオーバーライドして、バッジにライト (つまり のライト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の両方にかなり慣れていないため、その方法がわかりません。以前に s を拡張ListAdapterしたことがありますが、このバッジを拡張しようとすると、内部の Android リソースにアクセスしなければならないという問題に遭遇しますが、アクセスできません。

私が考えることができる他の解決策は、使用しているバッジを「だます」ことですHolo.Darkが、その方法がわかりません。

誰かが似たようなことをしたことがありますか、または少なくとも私を正しい方向に向けることができますか?

4

2 に答える 2

2

QuickContactBadge の代わりに ImageView を試してください

于 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 に答える