web-dev-qa-db-fra.com

Android Comment obtenir le thème de type AppCompat.Translucent avec la barre d’aide?

J'aimerais ajouter la barre d'action de support à l'une de mes activités. J'utilisais auparavant le thème.translucent avec cette activité, mais afin de rendre le travail de la barre d'action de support nécessaire pour hériter de Theme.AppCompat, je dois conserver une traduction transparente. thème dans cette activité, mais malheureusement, il n’ya pas de thème.AppCompat.translucent que je peux voir par défaut. Y at-il un moyen de le faire?

61
Edmund Rojas

Vous pouvez créer un nouvel ensemble de styles à utiliser, qui ont les mêmes propriétés que Theme.Translucent de themes.xml .

Ajoutez les éléments suivants à votre fichier styles.xml:

<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>

Vous pouvez changer le préfixe Theme.AppCompat vers quelque chose d'autre si vous souhaitez hériter d'autres éléments du thème, tels que les styles de dialogue, etc. Par exemple, un nom tel que Theme.AppCompat.Light.Translucent aurait les propriétés du thème Lumière.

Pour utiliser le nouveau style, définissez la propriété theme sur @style/Theme.AppCompat.Translucent

<activity
    Android:name=".TranslucentActivity"
    Android:theme="@style/Theme.AppCompat.Translucent" >
</activity>
146
Cameron Ketcham

Parama,

<style name="Theme.AppCompat.Translucent" parent="Theme.AppCompat.NoActionBar">
        <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>

Cela devrait être l'en-tête de style si vous voulez que la barre d'outils disparaisse. Vous pouvez utiliser n'importe quel thème parent doté de NoActionBar pour d'autres effets.

J'espère que cela t'aides

36
Dhaval Chheda

Si nous utilisons Translucent pour une activité transparente. Cela soulève d’autres problèmes - la couleur de Msgbox (maintenant blanche et précédemment noire), la couleur de la boîte de dialogue par défaut, les fileurs déroulants ne s'affichent pas mais ne montrent ni le soulignement ni la flèche déroulante. Les fileuses sont en couleur noir texte noir; liste déroulante blanche liste déroulante noir et etc. Pour résoudre ce problème, vous pouvez simplement utiliser le code ci-dessous

Dans le style

<style name="Theme.AppCompat.Transparent.NoActionBar" parent="Theme.AppCompat.Light.NoActionBar">
    <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">false</item>
    <item name="Android:backgroundDimEnabled">false</item>
</style>

dans le fichier manifeste

<activity
        Android:name=".activity.YourActivityName"
        Android:theme="@style/Theme.AppCompat.Transparent.NoActionBar" />

J'espère que ça va aider Merci

4
Monika

La réponse de Cameron est un Nice hack , mais elle produisit une barre d'action flottante et teinta la barre de statut, ce que je ne voulais pas. J'ai donc ajouté plus d'attributs xml pour rendre la barre d'état transparente (pour sdk> = 19) et utiliser Java pour rendre la barre d'action invisible).

mainActivity.Java:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();
     ...
    }
     ...
}

styles.xml

<style name="AppTheme.TranslucentBG">
    <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>

    <item name="Android:windowTranslucentStatus">true</item>
    <item name="Android:windowTranslucentNavigation">true</item>

</style>

manifeste.xml

<application
    Android:icon="@mipmap/ic_launcher"
    ...
    Android:theme="@style/AppTheme"
    ...
    >


    <activity Android:name=".MainActivity"
        Android:theme="@style/AppTheme.TranslucentBG"
        ...
        >
        ...
    </activity>
</application>
2
user4831795