8
votes

L'activité doit être transparente, mais a un fond noir

Mon étui d'utilisation écrit une activité de contrôleur de superposition pour un aperçu de la caméra de paysage. J'ai suivi les instructions d'un couple de tutoriels pour écrire un thème transparent.

Donc, mon résigne / style.xml ressemble à ceci: p> xxx pré>

L'extrait d'activité: P>

    <activity android:name=".CameraPreview"
       android:label="Camera"
       android:screenOrientation="landscape"
       android:theme="@android:style/Theme.NoTitleBar.Fullscreen">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <activity android:name=".Controlls"
              android:label="Controlls"
              android:screenOrientation="portrait"
              android:theme="@android:style/Theme.Translucent">
    </activity>


0 commentaires

6 Réponses :


2
votes

Essayez l'intégré @android: style / thème.translucide au lieu de votre personnalisé, selon Ce blog post . Je n'ai pas essayé de le faire moi-même, alors je ne sais pas si la technique écrite à ce sujet fonctionne ou non.


3 commentaires

@android: style / thème.TransLucence est transparent, mais corrige la vue à l'orientation de l'activité sous-jacente (aperçu de la caméra de mon paysage). Cette vue devrait être portrait.


Cela n'a rien à voir avec votre arrière-plan. Si vous ne voulez pas que votre activité change d'orientation, cela est traité d'une autre manière, telle que Android: SCRIPORIENTATION = "PORTRAIT" dans votre manifeste.


Désolé, que je ne l'ai pas mentionné, mais c'est exactement ce que j'ai fait. (Je vais éditer le poteau avec mon manifeste). Merci pour vos conseils jusqu'à présent.



1
votes

J'ai découvert, qu'un autre élément enfant important pour la description de style ci-dessus est true manquait.

problème:

Cet élément enfant provoque également la synchronisation de l'orientation de l'activité avec l'appelant. (même effet que @android: style / thème.translucide )


0 commentaires

1
votes

J'ai heurté le même problème que vous décrivez (en ce qui concerne l'arrière-plan translucide et l'orientation de l'écran), mais à la fin, je me suis réconcilié avec le fait que c'est à quoi cela fonctionne. En fait, il est de sens que cela fonctionne de cette façon. Je ne peux penser à aucun système à base d'écran qui prend en charge le mélange de portrait et de vue paysagère, alors pourquoi Android?

Je suppose que la règle générale est que toutes les activités visibles doivent avoir la même orientation, quels que soient les attributs du fichier manifeste. Si tous sont définis sur "capteur" , ils changeront tous, si on est fixé au portrait ou au paysage, les autres doivent suivre (et quiconque la définit la dernière "gagne").

Je suppose que c'était tellement évident pour les développeurs qu'il ne leur a pas eue de le documenter :)


0 commentaires

1
votes

Supprimer et tout c'est fait

@Override
public void onAttachedToWindow()  {}


0 commentaires

3
votes

Voici une réponse quelque peu liée à quelqu'un d'autre qui a un problème similaire.

tl; dr fort>
Ajout d'un nouveau style où le nom est un suffixe d'un style existant peut causer des problèmes (comme faire des activités transparentes ont un écran noir). P>


Problème: Notre origine d'activité transparente était noire après avoir effectué un grand refacteur. Strong> (l'activité utilisait déjà un thème transparent.) Em> p>

après plusieurs heures de passage des commits j'ai trouvé Ce qui semblait être la cause du problème. Dans notre application, nous utilisons des styles comme CSS. Il y avait un style existant comme celui-ci que nous avons appliqué sur textview. P> xxx pré>

La variante non gras du style a été ajoutée comme un style avant la variante audacieuse comme ci-dessous.

<style name="HeadLine.SM.White.MyFontRegular">
    <item name="android:fontFamily">@font/some_font</item>
</style>

<style name="HeadLine.SM.White.MyFontBold">
    <item name="android:fontFamily">@font/some_bold_font</item>
</style>


0 commentaires

0
votes

Le nom de style a un effet sur le fond transparent d'être noir. J'ai utilisé ci-dessous un et fonctionne bien.

<style name="Theme.AppCompat.Translucent">
    <item name="android:windowNoTitle">true</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=".TranslucentThemeActivity"
    android:theme="@style/Theme.AppCompat.Translucent"/>


0 commentaires