5
votes

SupportActionBar personnalisé a un aspect différent après réaffichage

J'essaie de créer une application d'activité unique et d'utiliser une SupportActionBar personnalisée dans mon activité . Les autres vues sont toutes des fragments.

Ma SupportActionBar personnalisée ressemble à ceci:

 Correct SupportActionBar

Maintenant, j'ai le cas où je dois afficher une vidéo en mode plein écran dans un Fragment . Par conséquent, j'appelle simplement la fonction de masquage de la SupportActionBar:

<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar_all_custombar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
android:fitsSystemWindows="true"
android:minHeight="?attr/actionBarSize"
app:titleTextAppearance="@style/AppTheme.TitleTextStyle"
app:titleTextColor="@color/textColorPrimary">

<TextView
    android:id="@+id/toolbar_title"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/all_toolbar_title"
    android:textColor="@android:color/white"
    android:textStyle="bold|italic"/>

</android.support.v7.widget.Toolbar>

Cela fonctionne bien, mais quand je veux afficher à nouveau la barre après le la vidéo est terminée, la barre n'a pas la même apparence.

 Wrong SupportActionBar

Dans mon Fragment j'appelle la fonction show depuis SupportActionBar et la fonction initToolbar de MainActivity:

fun initToolbar() {
    setSupportActionBar(toolbar_all_custombar)
    supportActionBar!!.setDisplayShowTitleEnabled(false)
    supportActionBar!!.setIcon(R.drawable.ic_launcher)
}

Et voici la méthode initToolbar de mon Activité :

override fun onStop() {
    super.onStop()
    (activity as MainActivity).supportActionBar!!.show()
    (activity as MainActivity).initToolbar()
}

La disposition de la barre d'outils:

override fun onResume() {
super.onResume()
(activity as  MainActivity).supportActionBar!!.hide()}

Je ne comprends pas pourquoi ma barre ressemble différent après l'avoir montré à nouveau. Quelle est la cause de ce comportement?


1 commentaires

avez-vous essayé .setVisibility (View.GONE); et .setVisibility (View.VISIBLE); au lieu de fonctions afficher et masquer?


6 Réponses :


0
votes

Essayez-le une fois en mettant des rembourrages ou des marges (en bas) sur le TextView.


0 commentaires

0
votes

Utilisez setSystemUiVisibility < / a>

Au lieu de supportActionBar !!. hide ()

hide (): si la fenêtre hébergeant l'ActionBar ne possède pas la fonctionnalité FEATURE_ACTION_BAR_OVERLAY il redimensionnera le contenu de l'application pour l'adapter au nouvel espace disponible.

setSystemUiVisibility (): le masquage de l'ActionBar via cet indicateur d'interface utilisateur système vous permet de le masquer de manière plus transparente en conjonction avec d'autres décorations d'écran.


0 commentaires

0
votes

Après avoir rendu la SupportActionBar visible à nouveau, vous pouvez essayer d'appeler (activity as MainActivity) .supportActionBar.invalidate (); pour redessiner toutes les vues qu'elle contient. Cela devrait permettre à votre supportActionBar d'être correctement redessiné.


0 commentaires

0
votes

Vous pouvez définir supportToolBar comme null lorsque vous souhaitez le masquer, puis restaurer la valeur précédente lorsque vous souhaitez l'afficher.

Ceci est testé et fonctionne dans mon cas.


0 commentaires

0
votes

Vous pouvez supprimer cette barre d'outils de votre activité et utiliser une classe BaseFragment dont tous les fragments étend et implémente show / hideToolbar dans ce BaseFragment et utilisez la fonction show / hide dans quel fragment vous voulez!


0 commentaires

0
votes

Merci pour votre aide! Je l'ai finalement résolu. Le problème était que j'utilisais des indicateurs View pour atteindre le mode plein écran dans le Fragment respectif. Par conséquent, j'ai supprimé la fonction suivante dans ce Fragment :

private fun hideSystemUiFullScreen() {
    exoplayer_videoview_container!!.systemUiVisibility = (View.SYSTEM_UI_FLAG_LOW_PROFILE
            or View.SYSTEM_UI_FLAG_FULLSCREEN
            or View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
            or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION)
}

Je n'ai pas changé mon onResume et onStop méthode. Le problème était donc uniquement l'utilisation des indicateurs View pour passer en mode plein écran.


0 commentaires