Intereting Posts
Добавление версии сервисов Google Play в манифест вашего приложения? Светодиодный фонарик не работает на Samsung Galaxy Nexus Ионная ошибка отображения, если gps выключен Как получить режим рабочего стола перетаскивания в корзину, в моем собственном приложении? Лучший способ комбинировать целые флаги с использованием Kotlin? Почему у Android есть собственный способ получить текущую локаль? Как играть несколько (максимум четыре в моем случае) .m3u8 потоковое видео в одиночной активности в Android? Произошла ошибка при отображении Android-целей Проверьте, добавлен ли элемент вида в макет или нет программно Как использовать Parcelable в фрагменте для получения данных? Поместите 2 переключателя рядом друг с другом (на одной «линии») в вертикальной компоновке USB-накопитель HP TouchPad на Android Firebase Crash Reporting – исключение java.lang.NullPointerException MomentJS похож на функциональность для Android-приложений Как изменить контент перед рендерингом в Android WebView?

Удалить программную панель тени программно

Как удалить тень из панели действий из java-кода?

Если я удалю из стиля, он работает нормально.

<style name="MyTheme" parent="Theme.Sherlock"> .... <item name="windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item> .... </style> 

Но мне нужно удалить и добавить его динамически из java-кода.

Solutions Collecting From Web of "Удалить программную панель тени программно"

Программный параметр windowContentOverlay установить значение атрибута windowContentOverlay . Но вы можете определить две разные темы: одну для деятельности с видимой тенью ActionBar и одну для других:

 <!-- Your main theme with ActionBar shadow. --> <style name="MyTheme" parent="Theme.Sherlock"> .... </style> <!-- Theme without ActionBar shadow (inherits main theme) --> <style name="MyNoActionBarShadowTheme" parent="MyTheme"> <item name="windowContentOverlay">@null</item> <item name="android:windowContentOverlay">@null</item> </style> 

Теперь вы можете настроить их на действия в AndroidManifest.xml :

 <!-- Activity with ActionBar shadow --> <activity android:name=".ShadowActivity" android:theme="@style/MyTheme"/> <!-- Activity without ActionBar shadow --> <activity android:name=".NoShadowActivity" android:theme="@style/MyNoActionBarShadowTheme"/> 

Или вы можете настроить правильную тему программно в onCreate() :

 @Override protected void onCreate(Bundle savedInstanceState) { setTheme(R.style.MyNoActionBarShadowTheme); super.onCreate(savedInstanceState); //... } 

Если вы не сделаете больше темы, попробуйте это. Это хорошо работает для меня!

 public void disableActionbarShadow() { if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { View v = getActivity().findViewById(android.R.id.content); if (v instanceof FrameLayout) { ((FrameLayout) v).setForeground(null); } }else { // kitkat. // v is ActionBarOverlayLayout. unfortunately this is internal class. // if u want to check v is desired class, try this // if(v.getClass().getSimpleName.equals("ActionBarOverlayLayout")) // (we cant use instanceof caz ActionBarOverlayLayout is internal package) View v = ((ViewGroup)getActivity().getWindow().getDecorView()).getChildAt(0); v.setWillNotDraw(true); } } 

Из Kitkat (возможно) ActionBarOverlayLayout включен в дерево представлений активности.
Это показывает тень панели действий (я думаю, XD)

Refs: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.4_r1/com/android/internal/widget/ActionBarOverlayLayout.java#79

Безусловно, я не знаю, что произойдет, если вы используете версию библиотеки поддержки.

Определите новый стиль. Обратите внимание, что родительский элемент не определен:

 <style name="ConOver" > <<== no parent <item name="android:windowContentOverlay">@null</item> </style> 

Добавьте это выше своего кода:

 // Add this line before setContentView() call // Lets you add new attribute values into the current theme getTheme().applyStyle(R.style.ConOver, true); // Rest stays the same 

Объявите 2 стиля, у ne есть тень, а другая – нет. THEN в вашем манифесте определяет тему каждого действия с соответствующим. например

 <Activity android:theme="@style/ThemeShadow" ...> ... <Activity android:theme="@style/ThemeNoShadow" ...> 

Я нашел эту статью: Изменить тему макета Runtime by Button Нажмите на Android

Он позволяет изменять тему активности, но вызывает call finish () и перезапускает активность. Поэтому я не уверен, что он будет работать для вас.

 import android.app.Activity; import android.content.Intent; public class Utils { private static int sTheme; public final static int THEME_DEFAULT = 0; public final static int THEME_WHITE = 1; public final static int THEME_BLUE = 2; /** * Set the theme of the Activity, and restart it by creating a new Activity of the same type. */ public static void changeToTheme(Activity activity, int theme) { sTheme = theme; activity.finish(); activity.startActivity(new Intent(activity, activity.getClass())); } /** Set the theme of the activity, according to the configuration. */ public static void onActivityCreateSetTheme(Activity activity) { switch (sTheme) { default: case THEME_DEFAULT: activity.setTheme(R.style.FirstTheme); break; case THEME_WHITE: activity.setTheme(R.style.SecondTheme); break; case THEME_BLUE: activity.setTheme(R.style.Thirdheme); break; } } }