J'ai une activité avec un Cependant, je voudrais Comme mon Ce que je peux faire avec la ligne suivante: p> Cependant, mon problème n'est pas que je ne peux pas définir la transparence de la barre d'état. Mon problème est que le changement dynamique de la barre d'état et de la couleur de la barre d'action ne fonctionne pas avec maintenant, j'ai suivi Ce tutoriel et Ce et Ce Stackoverflow se pose parmi beaucoup d'autres, mais n'a pas pu résoudre le problème. Tous ces articles disent que la barre d'action code> se déplace vers le haut, sous la barre d'état (de sorte que la barre d'état chevauche la barre d'action) une fois que j'ai défini la fenêtre J'ai également essayé de définir un alpha à la couleur de la barre d'état lorsque vous le modifiez par programmation. Cela rend la barre d'état quelque peu transparente, mais elle a l'air étrange car il n'est plus vraiment sombre em> plus. Suppression du coordinatorlayout code> n'est d'aucune aide, non plus. J'ai passé plusieurs heures à essayer de résoudre ce problème et je suis assez frustré maintenant. Toute aide est grandement appréciée. p> mon et voici le xml pour mon Drawerlayout code>. Notre client nécessite que nous modifions de manière dynamique la couleur de la barre d'action et la couleur de barre d'état correspondante de cette activité en fonction de l'élément sélectionné dans le drawerlayout code>. Ceci est facilement fait. Cependant, mon problème est que je ne suis pas capable de garder la barre d'état transparente lorsque je modifierai de manière dynamique la couleur de la barre d'état. Lorsque j'ouvre le tiroir, la barre d'état colorée couvre le haut du
DrawerLayout code> comme ceci:
Drawerlayout code> Pour ressembler à ceci: p>
WindowSlucentStatus code>. Ma couleur de barrière de statut reste le
Colorprimark Code> (la couleur jaunâtre de moutarde visible sur la barre d'état dans les images ci-dessus) même après que j'appelle
getwindow (). SetStatusbarcolor () code>. < / p>
Translucenttatus code> sur < code> vrai code>. Ensuite, je devrais pouvoir ajouter un peu de rembourrage à la barre d'action et simplement changer la couleur de la barre d'action entraînerait également une barre d'état plus sombre de la même couleur car la barre d'état est en réalité translucide et se chevauchant ma barre d'action. Cependant, pour une raison quelconque, cela ne se produit pas dans mon cas. La barre d'action reste où il est de savoir si je définis
fitssystemwindows code> sur
true code> ou
false code> ou supprimez l'attribut. La barre d'action est toujours inférieure à em> la barre d'état qui est bien sûr toujours jaune si je définis la transparence. P>
Activity_Main code>: p>
app_bar_main code>: p>
3 Réponses :
Je fais cela dans mon application comme ça.
String Theme; SaveData = getSharedPreferences(SaveFileName,0); Theme = SaveData.getString("Theme","Default Theme"); switch(Theme){ case "Light Theme": setTheme(R.style.AppThemeLight); setContentView(R.layout.activity_link_manager_light); ListTextViewID = R.id.AppListTextViewLight; ListRowID = R.layout.app_list_item_light; break;
Vous n'avez peut-être pas bien compris ma question. Je peux facilement régler la couleur de la barre d'état à l'aide de GetWindow (). SetStatusbarcolor (int Color); Code> Vous n'avez pas besoin de redémarrer l'activité pour cet appel ni appel
setContentView () Code> Plusieurs fois. Cependant, mon objectif est de définir la barre d'état sur transparent i> et dessinez la barre d'action sous i> it. (En outre, le redémarrage d'une activité à plusieurs reprises pour une question aussi triviale est un hack très inélégant.)
O Oui, j'ai raté cela, bien que vous puissiez le faire aussi en commutant le parent thématique de "noactionbar" à ".light" qui ajoutera une barre d'action et vous pouvez définir la couleur à l'aide du thème. Cela fera tout ce que vous voulez mais je ne sais pas comment le faire sans redémarrer l'application.
Vous pouvez également ajouter une barre d'action personnalisée de manière programmative en ayant une linearlayout ou en vue où la barre d'action serait, et la masquez et l'affiche de manière programmative par: "View.setVisibilité (vue.Gone);" "View.setVisibilité (vue.visible);"
En fait, pour me corriger, je ne pense pas qu'il redémarre l'application, juste l'activité, il a une animation sans douleur et il est rapide (au moins sur MM, c'est)
Croyez-moi. Redémarrer une activité plusieurs fois n'est pas quelque chose que vous devriez faire. Vous n'avez pas besoin de changer le thème non plus. Vous semblez assez nouveau à Android. Avez-vous déjà travaillé avec un DrawerLayout code>?
Vous changez beaucoup les couleurs? J'ai supposé que ce n'était pas plusieurs fois ...
Il n'y a rien de mal à ce que la pratique pour définir le thème d'une application, il ne se redémarrera que lorsque l'utilisateur modifie un thème, chaque fois qu'il chargera le thème qu'ils se distinguent avec la dernière fois, la première fois et ne pas avoir à redémarrer. D'où les économies sauvages.
Comme doc dit ici , flag_translucent_status doit ne pas être réglé. p>
Pour que cela prend effet, la fenêtre doit dessiner les arrière-plans de barre système avec Flag_Draws_system_bar_backgrounds et Flag_Translucent_status ne doit pas être défini. P> blockQuote>
J'avais aussi essayé cela aussi, mais cela entraîne le même comportement que dans le premier coup d'écran. Je veux que cela ressemble à la seconde, mais je puisse toujours changer la couleur de la barre d'état. Je pourrais également simplement rendre la barre d'état transparente et prolonger la barre d'action en dessous. Mais je suis incapable de faire non plus. :(
Votre problème est causé parce que Ajouter / Modifier le thème suivant dans votre Il s'agit du thème que le standard suivant, supprimer Suivant, où que vous changiez la couleur de la barre d'outils / barre d'état, utilisez Cela garantira que votre barre d'état est également translucide. Afin de donner la possibilité de changer de couleurs. J'espère que vous êtes capable de faire fonctionner cela. P> p> getwindow (). SeStatusbarcolor () code> ne fonctionne pas bien avec le
DrawerLayout code>. Afin de conserver votre barre d'état translucide et de pouvoir changer de couleur, vous devez suivre le processus ci-dessous:
v21 / styles.xml code> strong> fichier comme ci-dessous: p>
drawerlayout code> utilise (en supposant, bien sûr que vous êtes Utilisation de ce thème dans l'activité qui possède le
Drawerlayout code>). Cela rendra votre barre de statut translucide, comme vous le savez déjà. P>
Android: FitsSystemWindows = "true" code> à partir du coordinatorlayout code> dans votre < Code> app_bar_main code>. p>
drawerlayout.setStatusbarbackground (Colordrawable) code> en utilisant la même couleur que vous utilisez pour la barre d'outils (en supposant bien sûr. , que la référence à votre
dessinerlayout code> est appelée
drawerlayout code>). Notez que le
drawerlayout.setstatusbarbackground () code> Méthode prend un objet
Diomorable code>, contrairement à la fenêtre
window.setStatusbarcolor () code> méthode, qui prend un
int code> couleur, vous devrez peut-être convertir votre couleur en une fois à l'aide de quelque chose comme ceci: p>