Похоже, что все вложенные действия наследуют свой стиль от родительской группы действий. Итак, если вы применяете стиль к группе действий, у которой нет windowContentOverlay
, например:
<style name="Theme.MasterActivity" parent="@android:style/Theme">
<item name="android:windowContentOverlay">@null</item>
</style>
Он будет эффективно применяться ко всем вложенным действиям, и они избавятся от надоедливой тени. К сожалению, это удаляет эффект от родительской активности, который может плохо выглядеть для вашего приложения.
Другой подход - взломать иерархию представления, чтобы изменить свойство relevent внедренных действий во время выполнения. Быстрый осмотр с помощью HierarchyViewer показывает, что эта раздражающая тень рисуется как передний план FrameLayout
внутри DecorView
. Сам FrameLayout
содержит наш фактический пользовательский макет:
+-----------+ +-------------+ +--------------------+
| DecorView |-----| FrameLayout |-----| Your actual layout |----- ...
+-----------+ +-------------+ +--------------------+
Итак, задача состоит в том, чтобы позвонить setForeground(null)
по этому FrameLayout
в середине. Если мы переделаем последний пример с помощью luc, он будет выглядеть так:
final Window w = getLocalActivityManager().startActivity("LocalProducts", intent);
final View dv = null == w ? null : w.getDecorView();
if (dv != null && instanceof ViewGroup) {
ViewGroup group = (ViewGroup) currentView;
if (group.getChildCount() > 0) {
View child = group.getChildAt(0);
if (child instanceof FrameLayout) {
((FrameLayout) child).setForeground(null); // die, annoying shadow!
}
}
}