У меня есть прозрачный макет, используемый для размещения рекламы в баннере в моем приложении. Макет сидит поверх моей игровой площадки постоянно, но объявления появляются только время от времени. Код работает следующим образом:
transparent_linearlayout_to_hold_banner.setBackgroundColor(Color.TRANSPARENT);
game_frame_layout.addView(transparent_linearlayout_to_hold_banner);
setContentView(game_frame_layout);
Когда я хочу, чтобы объявление показывалось, я делаю
transparent_linearlayout_to_hold_banner.addView(adView);
Когда я хочу, чтобы объявление исчезло, я делаю
transparent_linearlayout_to_hold_banner.removeView(adView);
Это отлично работает на моей Галактике S! с 4.0.3, но на моей вкладке Galaxy с 2.3 я обнаружил, что мой transparent_linearlayout_to_hold_banner становится черным, как только появляется надпись, и остается черным навсегда больше, даже когда объявление удаляется.
Любая идея, что происходит?... и как ее исправить?
EDIT: после некоторых экспериментов я решил, что цвет макета не меняется, но альфа-канал. Я предполагаю, что, возможно, SDK баннерной рекламной системы вызывает некоторые функции, чтобы убедиться, что сам баннер не прозрачен, а затем (в зависимости от версии ОС) это имеет побочный эффект от создания родительского макета непрозрачный.
некоторые идеи:
вы можете просто удалить линию установки фона в lineraLayout:
transparent_linearlayout_to_hold_banner.setBackgroundColor(Color.TRANSPARENT);
?
Кроме того, вместо удаления и добавления adView вы можете переключать видимость линейногоLayout (или adView)?
попробуйте сделать макет, который вы хотите быть прозрачным в XML, а не динамически. У меня были такие проблемы с динамически добавленным ListView с прозрачными элементами.
У вас здесь игра, поэтому, конечно, то, что я предлагаю, может не работать, или будет трудно сделать, но вы можете использовать FrameLayout, чтобы поместить свой макет, на который вы рисуете, и прозрачный поверх него. Также обратите внимание: в этом случае штрихи будут идти в макет объявления. Это можно предотвратить, но это немного похоже на взлом (я сделал это кстати один раз).
Я не знаю, будет ли это работать, но попробуй.
Если вы используете admob, попробуйте последнюю версию 6.0, у нее есть несколько улучшений (как я вижу), контролирующих внешний вид объявления, похоже, больше внимания уделяется атрибутам, описанным в Best Practices: Указание цветов объявлений. У меня была аналогичная проблема с предыдущей версией библиотеки. Тем не менее, он не позволяет альфа-канал, поэтому вы не сможете указать прозрачный фон объявления, но он может решить вашу проблему.
Перед добавлением рекламного баннера попробуйте сделать макет непрозрачным.
Когда вы хотите удалить объявление, снимите рекламный баннер и снова сделайте макет прозрачным.
Повторите попытку добавления этой строки после удаления объявления.
transparent_linearlayout_to_hold_banner.setBackgroundColor(Color.TRANSPARENT);