2016-07-27 4 views
0

У меня довольно распространенное требование.Активность Android прозрачный

У меня есть активность, которая должна отображаться на экране в полноэкранном режиме на мобильных устройствах (размер-нормальный) и в виде диалогового окна на планшетных устройствах (размер-большой и размер-большой).

В обоих форматах у меня есть UI-виджеты, отображаемые в виде содержимого Activity, например Horizontal-ProgressBar, Circular-ProgressBar в качестве индикатора нагрузки и т. Д., Которые должны следовать согласованному Material-Design с Custom-Branded colors и т. Д. Я не могу отказаться от этого требования.

Я определил пользовательские стили на основе стандартных тем и стилей Android и использую их в приложении для всех видов деятельности. Ниже приведены пользовательские темы.

<!-- Base application theme. --> 
<style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
    <item name="android:colorPrimary" tools:ignore="NewApi"> 
     @color/light_black 
    </item> 
    <item name="colorPrimary">@color/light_black</item> 
    <item name="android:colorAccent" tools:ignore="NewApi">@color/sapphire</item> 
    <item name="colorAccent">@color/sapphire</item> 
    <item name="android:colorBackground">@color/primary_background</item> 
    <item name="android:textColorPrimary">@color/title_color</item> 
    <item name="android:colorButtonNormal" tools:ignore="NewApi">@color/sapphire</item> 
    <item name="colorButtonNormal">@color/sapphire</item> 
    <item name="android:colorForeground" tools:ignore="NewApi"> 
     @color/title_color 
    </item> 
    <item name="android:titleTextStyle">@style/toolbar_title</item> 
    <item name="android:navigationIcon" tools:ignore="NewApi">?android:attr/homeAsUpIndicator</item> 
    <item name="navigationIcon">?android:attr/homeAsUpIndicator</item> 
    <item name="android:colorControlNormal" tools:ignore="NewApi">@color/white</item> 
    <item name="colorControlNormal">@color/white</item> 
</style> 

<style name="AppTheme.Light" parent="AppTheme"> 
    <item name="android:windowBackground">@color/white</item> 
</style> 

<style name="AppTheme.Dialog" parent="AppTheme.Light"> 
    <item name="android:windowBackgroundFallback" tools:ignore="NewApi"> 
     @android:color/transparent</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:colorBackgroundFloating" tools:ignore="NewApi"> 
     @android:color/transparent</item> 
    <item name="windowActionBar">false</item> 
    <item name="windowActionBarOverlay">false</item> 
    <item name="windowActionModeOverlay">false</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowClipToOutline" tools:ignore="NewApi">false</item> 
    <item name="android:windowTitleStyle">@null</item> 
    <item name="android:windowTitleBackgroundStyle">@null</item> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowCloseOnTouchOutside">true</item> 
    <item name="android:windowEnableSplitTouch">true</item> 
    <item name="android:fitsSystemWindows">true</item> 
    <item name="android:fillViewport">true</item> 
    <item name="android:backgroundDimEnabled">true</item> 
    <item name="android:backgroundDimAmount">0.2</item> 
</style> 

Я использую AppTheme в качестве темы по умолчанию во всех деятельности в App и AppTheme.Dialog для конкретной деятельности, описанной выше, только для планшетных устройств. Действие действительно отображается как окно с плавающей запятой, расположенное в центре экрана планшета, при отключении, как обычный диалог, отключается, все хорошо, но проблема заключается в том, что оконный фон Activity похож на черно-черный.

Мое требование состоит в том, что активность как плавающий-диалог в планшетных устройствах должна иметь Прозрачный фон, демонстрирующий предыдущее содержимое окна активности, возможно, затемненное и затемненное.

Как достичь этого, не используя тему.Dialog или Theme.Translucent, как я уже говорил, мне нужны спецификации Material-Design для UI-Widgets, которые не должны меняться от оригинального стиля «AppTheme».

Мне также нужно будет повторно использовать множество индивидуальных частных методов, объявленных в классе Activity, поэтому загрузка макета-файла содержимого в экземпляр Dialog определенно не является предпочтительной.

О, btw, compileSdkVersion является последним в 24, minSdkVersion - 16, а targetSdkVersion - 24, buildToolsVersion также является последним в 24.0.1, но это совсем другое дело.

ответ

0

Итак, я, наконец, понял. Я объявила «AppTheme.Light» в качестве темы по умолчанию в манифесте Android для той же самой активности, поскольку она должна отображаться в полноэкранном режиме с белым-непрозрачным фоном в мобильных устройствах, в то время как та же активность должна отображаться как плавающий диалог в планшетных устройствах, поэтому я задавал тему «Programmatically» для AppTheme.Dialog в жизненном цикле активности.

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

1

Используйте Dialog, чтобы создать прозрачную тему.

Пример:

Dialog alertDialog = new Dialog(this); 
alertDialog.requestWindowFeature(Window.FEATURE_NO_TITLE); 
alertDialog.setContentView(R.layout.tabs); 
alertDialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 
alertDialog.show(); 

Примечание: AlertDialog строитель на самом деле не хорошо для разработки прозрачного диалога и будет и всегда иметь этот черный фон, который на самом деле тема для него.

For more refer this link

+0

Как я уже говорил, я не хочу использовать диалоговые экземпляры. Я хочу, чтобы Activity отображалась как диалоговое окно с прозрачным фоновым плавающим окном в устройствах Large и XLarge, но в качестве полноэкранного окна в Normal и Small Devices. Кроме того, необходимо будет реорганизовать много функций щелчка и взаимодействия с пользователем, если я начну использовать экземпляр диалога, специфичный для планшетных устройств. – AndroidRocks

0

При использовании фрагментов, то не помню, чтобы заменить новый фрагмент, но добавить его поверх предыдущего и определить тему с цветом фона, как прозрачный.

Если вы используете действия, просто используйте прозрачный тематический фон для деятельности или диалога в зависимости от того, что вы используете.

+0

Я не использую Фрагменты. Фрагменты - плохой дизайн, они пост-обработаны, что означает, что жизненный цикл фрагмента выполняется после жизненного цикла активности и завершается цикл рисования активности. Что касается прозрачного тематического фона, как я уже упоминал ранее, у меня есть другие UI-Widgets, которые строго должны следовать указанным правилам стиля Material-Design, таким как горизонтальная панель прогресса, которая по-видимому отличается по внешнему виду между Theme.AppCompat. NoActionBar, Theme.Dialog и Theme.Translucent. – AndroidRocks

Смежные вопросы