Je dois implémenter l'écran de démarrage dans mon application en nid d'abeille . J'utilise ce code dans l'activité onCreate pour afficher le démarrage:
setContentView(R.layout.splash);
getActionBar().hide();
et ce code pour afficher l'interface utilisateur principale après un certain temps:
setContentView(R.layout.main);
getActionBar().show();
Mais before onCreate est appelé et Splash apparaît. La barre d'action est peu de temps.
Comment puis-je rendre la barre d'action invisible?
J'ai essayé d'appliquer le thème à l'activité sans barre d'action:
<item name="Android:windowActionBar">false</item>
mais dans ce cas, getActionBar () renvoie toujours la valeur null et je n’ai trouvé aucun moyen de le montrer à nouveau.
Le paramétrage de Android:windowActionBar="false"
désactive réellement la barre d’action mais, comme vous le dites, getActionBar();
renvoie null . Ceci est résolu par:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getActionBar().hide();
setContentView(R.layout.splash); // be sure you call this AFTER requestFeature
Cela crée la barre d’action et la masque immédiatement avant qu’elle puisse être affichée.
Mais maintenant, il y a un autre problème. Après avoir placé windowActionBar="false"
dans le thème, l’activité dessine son titre de fenêtre normal au lieu d’un ActionBar.
Si nous essayons d'éviter cela en utilisant certains des thèmes de stock *.NoTitleBar
ou si nous essayons de mettre <item name="Android:windowNoTitle">true</item>
dans notre propre thème, cela ne fonctionnera pas.
La raison en est que le ActionBar dépend du titre de la fenêtre à s’auto-afficher - c’est-à-dire que le ActionBar est un titre de fenêtre transformé.
Le truc qui puisse nous aider est donc d’ajouter une chose à notre thème d’activité XML:
<item name="Android:windowActionBar">false</item>
<item name="Android:windowTitleSize">0dp</item>
Cela rendra le titre de la fenêtre avec une hauteur nulle, donc pratiquement invisible.
Dans votre cas, lorsque vous avez terminé d’afficher l’écran d’accueil, vous pouvez simplement appeler le
setContentView(R.layout.main);
getActionBar().show();
et vous avez terminé. L’activité commencera sans scintillement de la barre d’action ni affichage du titre de la fenêtre.
ADDON: Si vous affichez et masquez l'ActionBar plusieurs fois, vous avez peut-être remarqué que l'affichage du premier _ est non animé. À partir de ce moment-là, montrer et se cacher sont animés. Si vous voulez aussi avoir une animation lors de la première projection, vous pouvez utiliser ceci:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_ACTION_BAR);
// delaying the hiding of the ActionBar
Handler h = new Handler();
h.post(new Runnable() {
@Override
public void run() {
getActionBar().hide();
}
});
La même chose peut être réalisée avec:
protected void onPostResume() {
super.onPostResume();
getActionBar().hide();
mais il faudra peut-être un peu plus de logique pour vérifier s'il s'agit du premier affichage de l'activité.
L’idée est de retarder un peu la dissimulation de la barre d’action. D'une certaine manière, nous permettons d'afficher la barre d'actions, mais de la masquer immédiatement. Ainsi, nous allons au-delà de la première diffusion non animée et la projection suivante sera considérée comme la deuxième, donc elle sera animée.
Comme vous l'avez peut-être deviné, il est possible que la barre d'action pourrait soit vue avant d'être masquée par l'opération retardée. C'est en fait le cas. La plupart du temps, rien ne se voit mais pourtant, de temps en temps, vous pouvez voir le scintillement de la barre Action pendant une fraction de seconde.
En tout cas, ce n’est pas une belle solution, toutes les suggestions sont les bienvenues.
Addition pour l'utilisateur de la barre d'action support v7, le code sera:
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
getSupportActionBar().hide();
Utilisation de ce code simple dans votre fichier .class pour masquer la barre d’action
getSupportActionBar().hide();
Si vous utilisez ActionBarSherlock, utilisez le thème Theme.Sherlock.NoActionBar dans votre activité.
<activity
Android:name=".SplashScreenActivity"
Android:theme="@style/Theme.Sherlock.NoActionBar">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Créez deux styles:
<style name="AppThemeNoBar" parent="Theme.AppCompat.Light">
<item name="Android:windowNoTitle">true</item>
</style>
<style name="AppThemeBar" parent="Theme.AppCompat.Light">
<item name="Android:windowNoTitle">false</item>
</style>
Définissez AppThemeNoBar en tant que thème d'application et AppThemeBar sur l'activité pour laquelle vous souhaitez afficher le composant ActionBar. En utilisant deux styles, vous ne verrez pas la barre d'action pendant le chargement des vues.
Vérifiez ce lien Android: masquer la barre d’action pendant le chargement de la vue
Salut j'ai une solution simple en utilisant 2 thèmes
Thème de l'écran d'accueil (à ajouter au manifeste):
<style name="SplashTheme" parent="@Android:style/Theme.Holo.NoActionBar">
<item name="Android:windowBackground">@color/red</item>
</style>
thème normal (ajoutez-le à votre activité par setTheme (R.style.Theme)):
<style name="Theme" parent="@style/Theme.Holo"> <item name="Android:windowBackground">@color/blue</item>
</style>
Pour prendre en charge le SDK 10:
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme(R.style.Theme);
super.onCreate(savedInstanceState);
...........
...........
}
J'essayais également de cacher Action Bar sur Android 2.2, mais aucune de ces solutions ne fonctionnait. Tout se termine par un crash. J'ai vérifié la base de données DDMS, il me disait d’utiliser «Theme.AppCompat». Enfin, j’ai résolu le problème en modifiant le Android:theme="@Android:style/Theme.Holo.Light.NoActionBar"
Line.
dans Android:theme="@style/Theme.AppCompat.NoActionBar"
et cela a fonctionné, mais l'interface était sombre.
alors j'ai essayé Android:theme="@style/Theme.AppCompat.Light.NoActionBar"
et finalement obtenu ce que je voulais.
Après cela, lorsque j'ai cherché 'AppCompat' sur Site du développeur, j’ai eu ceci.
Je pense donc que la solution pour Android 2.2 est
<activity
Android:name=".MainActivity"
Android:theme="@style/Theme.AppCompat.Light.NoActionBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Et désolé pour mon mauvais anglais, comme toujours.
Le meilleur résultat pour moi a été de créer une activité avec ThemeNoTitleBar et sans contenu en tant que lanceur. Ensuite, cette activité appelle directement à l’autre.
Bien sûr, si vous le souhaitez, vous pouvez ajouter du contenu à l'activité Splash, mais dans mon cas, je voulais simplement afficher l'application directement.
Manifeste:
<activity
Android:name="com.package.SplashActivity"
Android:theme="@Android:style/Theme.Black.NoTitleBar" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Activité:
public class SplashActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//start StartActivity
Intent intent = new Intent(this, StartActivity.class);
startActivity(intent);
finish();
}
}
Si vous utilisez une Activity
incluse un écran de démarrage, vous pouvez le faire si vous utilisez SherlockActionBar
getSupportActionBar().hide();
Après l'écran de démarrage, vous pouvez le montrer à nouveau avec ...
getSupportActionBar().show();
Il devrait en être de même avec ActionBar
d'Android.
meilleur et simple
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
2015, en utilisant la bibliothèque de support v7 avec le thème AppCompat, définissez ce thème pour votre activité.
<style name="AppTheme.AppStyled" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimaryDark">@color/md_Indigo_100</item>
<item name="colorPrimary">@color/md_Indigo_500</item>
<item name="colorAccent">@color/md_red_500</item>
<item name="Android:textColorPrimary">@color/md_white_1000</item>
<item name="Android:textColor">@color/md_purple_500</item>
<item name="Android:textStyle">bold</item>
<item name="windowNoTitle">true</item>
<item name="windowActionBar">false</item>
</style>
La solution @Clerics fonctionne. Mais cela semble également être un problème avec certaines des applications natives de Google: Google, Play Store, parler. Aussi d'autres grandes applications comme Skype.
EDIT: La solution ci-dessous m'a posé un problème pour actionbarsherlock sur api <4.0, la raison étant setTheme ne fonctionne pas avant le sandwich à la crème glacée
Ajoutez ce qui suit dans votre manifeste au sein de votre application ou de vos balises d'activité:
Android:theme="@style/Theme.NoActionBar"
Et ensuite dans votre activité principale:
// Set theme
setTheme(R.style.YOUR_THEME);
getSupportActionBar().setTitle(R.string.title);
// Start regular onCreate()
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Pour Splashscreen
, vous devez utiliser cette ligne dans manifest
et ne pas utiliser getActionBar()
<item name="Android:windowActionBar">false</item>
et une fois lorsque Splash Activity
est terminé dans la Activity
principale ci-dessous ou rien
<item name="Android:windowActionBar">true</item>
Essayez ceci, ça marche pour moi:
Ci-dessous se débarrasse de la barre de titre de l'activité
requestWindowFeature(Window.FEATURE_NO_TITLE);
Ci-dessous élimine la barre de notification pour que l'activité passe en plein écran
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
(Exemple complet ci-dessous) Prenez note: Ces méthodes ont été appelées avant de définir l'affichage du contenu de notre activité.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Sets Application to full screen by removing action bar
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
// without this check, we would create a new fragment at each orientation change!
if (null == savedInstanceState)
createFragment();
}
cela peut être pratique
Ajoutez ceci à votre manifeste
Android:theme="@Android:style/Theme.Light.NoTitleBar"
à votre santé
Le meilleur moyen que je trouve après avoir lu toutes les options disponibles est de définir le thème principal sans ActionBar, puis de configurer MyTheme dans le code parent de toute l'activité.
Manifeste:
<application
...
Android:theme="@Android:style/Theme.Holo.Light.NoActionBar"
...>
BaseActivity:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setTheme(R.style.GreenHoloTheme);
}
Cela me permet d’éviter ActionBar au démarrage de l’application!
Si vous avez la valeur null car vous utilisez la bibliothèque support library , au lieu de getActionBar()
, vous devez appeler getSupportActionBar()
.
Les solutions déjà postées sont venues avec l’effet latéral, à savoir que le premier appel .show () n’animait pas la barre d’action pour moi .
Créez un dessin transparent - quelque chose comme ça:
<shape xmlns:Android="http://schemas.Android.com/apk/res/Android"> <solid Android:color="#00000000" /> </shape>
Définissez l’arrière-plan de la barre d’action sur une vue personnalisée invisible que vous définissez dans la barre d’action:
getSupportActionBar().setCustomView(R.layout.actionbar_custom_layout); getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM, ActionBar.DISPLAY_SHOW_CUSTOM | ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE);
Définissez l’arrière-plan transparent de la barre d’action dans onCreate:
getSupportActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.background_transparent));
Important: Ne cachez pas la barre d’action immédiatement dans onCreate, mais avec un peu de retard par la suite - par exemple. quand la mise en page est terminée avec la création:
getWindow().getDecorView().getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
getSupportActionBar().hide();
}
});
Avant votre premier appel .show (), définissez la vue personnalisée comme suit:
_actionbarRoot.setVisibility(View.VISIBLE); getSupportActionBar().show();
Placez votre écran de démarrage dans une activité distincte et utilisez startActivityForResult
depuis la méthode onCreate
de votre activité principale pour l'afficher. Cela fonctionne parce que, selon la documentation:
Dans un cas particulier, si vous appelez startActivityForResult () avec un requestCode> = 0 lors de la première activation de onCreate (Bundle savedInstanceState)/onResume () de votre activité, votre fenêtre ne sera pas affichée jusqu'à ce qu'un résultat soit renvoyé. . Ceci permet d'éviter le scintillement visible lors de la redirection vers une autre activité.
Vous ne devriez probablement le faire que si l'argument de onCreate
est null
(indiquant un nouveau lancement de votre activité, par opposition à un redémarrage dû à un changement de configuration).
Ajoutez simplement ceci dans votre styles.xml
<item name="Android:windowNoTitle">true</item>
J'avais toujours une erreur avec le pointeur null et finalement cela m'a aidé lorsque j'ai appelé d'abord getWindow (). RequestFeature () puis super.onCreate ()
public void onCreate(Bundle savedInstanceState) {
getWindow().requestFeature(Window.FEATURE_ACTION_BAR);
super.onCreate(savedInstanceState);
getActionBar().show();
Ajoutez simplement ceci à votre MainActivity dans la fonction onCreate.
val actionBar = supportActionBar?.apply { hide() }
Pour ce faire, la meilleure solution consiste à créer la première activité en tant qu’activité vide et le contenu que vous souhaitez insérer, puis au bout d’un certain temps, déclenchez une autre activité . En procédant ainsi, vous pouvez créer la première activité en tant qu’écran de démarrage sans action. bar ou quoi que ce soit . Voici ma première activité
package com.superoriginal.rootashadnasim.syllabus;
import Android.content.Intent;
import Android.os.Handler;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
public class first_screen extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first_screen);
final Handler h=new Handler();
h.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent=new Intent(getApplicationContext(),DrawerChooseBranchMainActivity.class);
startActivity(intent);
}
},2000);
}
}
Après cela, vous pouvez placer n'importe laquelle de vos activités en tant que première activité Si vous ne voulez aucune barre d'action dans aucun écran, ajoutez-la simplement dans vos styles.
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
En fait, vous pouvez simplement définir splash Activity
avec NoActionBar
Et définir votre activity
principale avec une barre d’action.