2012-05-07 3 views
13

Я хотел бы иметь активность (2) с полупрозрачным аспектом над другой деятельностью (1), выровненную в верхней части экрана (4).Прозрачная активность, заполняющая весь экран

enter image description here

Я попытался назначить эти темы для деятельности № 2:

<style name="Theme.CustomDialog" parent="android:style/Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/black</item> 
</style> 

<style name="CustomTheme"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowNoTitle">true</item> 
</style>  

Но результат всегда 3.

Если установить <item name="android:windowIsFloating">false</item> в CustomTheme результат является 2.

Может ли кто-нибудь сказать мне, как я могу получить 4? Благодаря!

UPDATE: Это моя деятельность 2 макета:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" android:background="#0000"> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:background="#FFFFFF"> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Menu" android:layout_centerHorizontal="true"/> 

    </RelativeLayout> 

</RelativeLayout> 
+0

http: // stackoverflow.com/questions/36305283/how-to-make-translucent-activity – Mangesh

ответ

19

Наконец, эта тема работала, чтобы получить результат, как номер изображения 4:

<style name="Theme.CustomTranslucent" parent="android:style/Theme.Translucent"> 
     <item name="android:backgroundDimEnabled">true</item> 
     <item name="android:backgroundDimAmount">0.5</item> 
     <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
     <item name="android:background">@android:color/transparent</item> 
</style> 

В моем макете деятельности 2, я мог бы eihter установить android:background="@android:color/transparent" или нет какого-либо значения вообще, чтобы сделать его работу ,

Благодаря MikeIsrael и Veer за помощь.

+0

Я просто сделал то, что вы написали, и это не сработает. У меня есть один стиль, как ваш последний, тот, который отвечает. 2, и что-то не хватает, потому что это непрозрачно :( – Taochok

3

Во-первых есть Transparent Theme активность:

<style name="Theme.Transparent" parent="android:Theme"> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:backgroundDimEnabled">false</item> 
</style> 

Назначьте прозрачную тему для вашей деятельности в манифесте:

<activity android:name=".MyActivity" 
       android:label="@string/app_name" 
       android:theme="@style/Theme.Transparent"/> 

Создайте макет согласно вашему требованию ement и настроить представление содержимого вашей деятельности на этот макет.

Попробуйте следующее расположение:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:background="@android:color/transparent"> 

    <RelativeLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#FFFFFF" 
     android:layout_alignParentTop="true"> 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Menu" android:layout_centerHorizontal="true"/> 

    </RelativeLayout> 

</RelativeLayout> 

Надеется, что это полезно.

+0

Это не работает. Я получаю мою кнопку меню посередине (например, изображение 3) без эффекта полупрозрачности. –

+0

можете ли вы разместить свой макет xml с кнопкой меню? – Veer

+0

Попробуйте макет, который добавлен в мой ответ – Veer

0

Я не уверен, как это сделать через xml, но это должно работать программно, попробуйте добавить это к своей деятельности (возможно, к основному виду деятельности).

//grab layout params 
WindowManager.LayoutParams lp = this.getWindow().getAttributes(); 

//remove the dim effect 
lp.dimAmount = 0; 
+0

Я попробовал это без темы, примененной к моей деятельности, и получил тот же результат, что и на изображении № 2. Применительно к моей CustomTheme я получил номер 3 без полупрозрачного эффекта. –

+0

@ Xavi hmmm, ну может быть, тусклый не от активности, а от главной компоновки или чего-то еще. Как насчет попытки вызова getWindow()? Возможно, попробуйте добавить идентификатор в realtivelayout, затем поместите макет с помощью findViewBy, а затем вызовите окно get на макет. Любое изменение? – MikeIsrael

10

Я прочитал другие решения, но вот мое решение:

style.xml

<resources> 
<style name="mytransparent.windowNoTitle" parent="android:Theme.Holo.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation</item> 
</style> 
<style name="mytransparent.windowTitle" parent="android:Theme.Holo.Light"> 
    <item name="android:background">@android:color/transparent</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    <item name="android:windowIsTranslucent">true</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation</item> 
</style> 

AndroidManifest.xml

<activity 
    android:name=".LoginActivity" 
    android:theme="@style/mytransparent.windowTitle" 
    android:configChanges="orientation" 
    android:label="@string/title_activity_login" 
    android:screenOrientation="portrait" ></activity> 
5

Если вы используете AppCompatActivity то вы должны использовать в качестве родителя Theme.AppCompat иначе applyat ион может висеть или сбой с ошибкой (java.lang.RuntimeException: Unable to start activity ComponentInfo ... Caused by: java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity.).

<style name="URTransparent" parent="Theme.AppCompat"> 
    // Copied from Theme.Translucent 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:colorBackgroundCacheHint">@null</item> 
    <item name="android:windowIsTranslucent">true</item> 

    <item name="android:backgroundDimEnabled">true</item> 
    <item name="android:backgroundDimAmount">0.5</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:background">@android:color/transparent</item> 
</style> 
+0

Хороший момент, спасибо за головы. Это сработало для меня. – Alix