QuickContactBadge наложение

Я использую QuickContactBadge в моем приложении, и он прекрасно работает.

Тем не менее, значок показывает небольшое наложение в правом нижнем углу. Я полагаю, что это там, чтобы указать, что это QuickContactBadge а не просто картинка. Я полностью в порядке с этим, однако, так как я использую Holo.Light в моем приложении значок контакта показывает темное наложение. Например, в стоковой звонилке с Holo.DarkНаложение светлое.

Я понимаю причину этого, однако темное наложение просто уродливо поверх большинства фотографий контактов, тогда как наложение света работает для большинства.

Итак, как я могу переопределить оверлей и заставить значок показать свет (т.е. Holo.Dark) наложение?

Глядя на источник Android для 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 но я понятия не имею, как это сделать.

Кто-нибудь сделал что-то подобное или, по крайней мере, может указать мне правильное направление?

2 ответа

Решение

Попробуйте с ImageView вместо QuickContactBadge

В SDK 21 Google добавил setOverlay(Drawable drawable) метод.

Он принимает значение null, поэтому еще одна опция, позволяющая скрыть декоратор и сохранить функциональность QuickContactBadge:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    contactBadge.setOverlay(null);
}
Другие вопросы по тегам