ActionBar Android translucide personnalisé

J’ai parcouru les interwebs (par exemple, la documentation Android, les réponses ici, etc.) pour trouver la réponse à ce que je pensais être une question assez sortingviale. Comment obtenez-vous une barre d’action translucide comme celles de Google Music et de YouTube (les liens sont des exemples d’images)?

Je souhaite que le contenu vidéo soit en plein écran et ne soit pas contraint par la barre d’action, tout en tirant parti des avantages d’un composant d’interface utilisateur intégré. Je peux évidemment utiliser un affichage entièrement personnalisé, mais je préfère utiliser le ActionBar si possible.

Manifeste

 

Activité

 // Setup action bar ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD); View customActionBarView = getLayoutInflater().inflate(R.layout.player_custom_action_bar, null); actionBar.setCustomView(customActionBarView, new ActionBar.LayoutParams(ActionBar.LayoutParams.MATCH_PARENT, R.dimen.action_bar_height)); actionBar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM); 

Menu

     

ActionBar View personnalisée

           

Si vous souhaitez que votre activité soit en plein écran tout en affichant une barre d’action, mais avec un alpha, vous devez demander le mode superposition pour la barre d’actions dans onCreate() de votre activité:

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); //getWindow().requestFeature(WindowCompat.FEATURE_ACTION_BAR_OVERLAY); << Use this for API 7+ (v7 support library) 

Ensuite, après avoir appelé setContentView(..) (puisque setContentView(..) initialise également la barre d’action à côté de la définition du contenu), vous pouvez définir un arrière-plan pouvant être dessiné sur votre barre d’actions:

 getActionBar().setBackgroundDrawable(getResources().getDrawable(R.drawable.actionbar_bg)); 

qui peut être une forme pouvant être dessinée avec un alpha mis en res / drawable:

     

Vous pouvez aussi le faire complètement par programmation en créant un ColorDrawable :

 getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0))); 

Sinon, bien sûr, vous pouvez cacher complètement la barre d'action; Dans ce cas, vous pouvez définir un thème personnalisé pour votre activité dans votre manifeste:

 @android:style/Theme.NoTitleBar.Fullscreen 

ou par programmation en appelant

 getActionBar().hide(); 

En plus de la réponse correcte, si vous utilisez AppcomatActivity, appelez supportRequestWindowFeature au lieu de

Ancienne version: getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY);

Vous voulez utiliser:

 @Override protected void onCreate(Bundle savedInstanceState) { supportRequestWindowFeature(Window.FEATURE_ACTION_BAR_OVERLAY); super.onCreate(savedInstanceState); } 

Je pense que vous devriez pouvoir le faire en utilisant le drapeau de fenêtre FEATURE_ACTION_BAR_OVERLAY .

Avant d’appeler setContentView() dans votre activité,

Appel:

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

Et il utilisera un ActionBar superposé au lieu de pousser votre fenêtre vers le bas.

Le code ci-dessus est absolument correct pour créer une barre d’action.

Au lieu de

 getActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(128, 0, 0, 0))) 

utilisation

 getActionBar().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); 

De cette façon, vous pourrez voir la barre d’action complètement transparente.

Voici comment cela fonctionne:

1) Demande de superposition de barre d’action par programmation en appelant

  getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

cette ‘requestFeature ()’ doit être demandée à votre méthode d’activité ‘onCreate ()’ avant d’appeler ‘setContentView (R.layout.my_layout)’:

2) définissez la couleur de la barre d’action en appelant setBackgroundDrawable() comme setBackgroundDrawable() :

 getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#00212121")) ); 

cette méthode nécessite une référence à un dessinable ou vous pouvez également utiliser un parsingur de couleur pour parsingr une valeur de couleur hexadécimale (les 2 premiers chiffres sont utilisés pour le canal alpha à partir de # 00 à #FF)

Notez que j’utilise actionBarSherlok getSupportActionBar() mais cela devrait fonctionner avec n’importe quelle barre d’action.

Si vous n’arrivez toujours pas à faire fonctionner ceci, essayez de l’append à votre style de thème

 true @style/ActionBar.Transparent.Example true 

Je voudrais juste partager avec vous les mesures que j’ai sockets pour y parvenir:

1) Au OnCreate de votre activité,

 getWindow().requestFeature(Window.FEATURE_ACTION_BAR_OVERLAY); 

puis

 getWindow().setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); 

Ceci est fait avant setContentView.

2) Après setContentView, vous pouvez faire ce qui suit

  getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.argb(0, 100, 181, 246))); 

Où l’alpha de 0 signifie qu’il est totalement transparent.