14ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes/* 24ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Copyright (C) 2014 The Android Open Source Project 34ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * 44ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Licensed under the Apache License, Version 2.0 (the "License"); 54ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * you may not use this file except in compliance with the License. 64ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * You may obtain a copy of the License at 74ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * 84ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * http://www.apache.org/licenses/LICENSE-2.0 94ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * 104ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * Unless required by applicable law or agreed to in writing, software 114ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * distributed under the License is distributed on an "AS IS" BASIS, 124ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * See the License for the specific language governing permissions and 144ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * limitations under the License. 154ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes */ 164ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 174ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banespackage com.example.android.supportv7.app; 184ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 194ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport com.example.android.supportv7.R; 204ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 214ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.os.Bundle; 224ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.support.v7.app.ActionBar; 2344d25261c2a38c81f1eea123de3986b453b9afeeChris Banesimport android.support.v7.app.AppCompatActivity; 244ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.support.v7.widget.Toolbar; 254ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.Gravity; 264ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.Menu; 274ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.View; 284ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.ViewGroup.LayoutParams; 294ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 304ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes/** 314ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * This demo shows how various action bar display option flags can be combined and their effects 324ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * when used on a Toolbar-provided Action Bar 334ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes */ 3444d25261c2a38c81f1eea123de3986b453b9afeeChris Banespublic class ToolbarDisplayOptions extends AppCompatActivity 354ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes implements View.OnClickListener { 364ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 374ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes private View mCustomView; 384ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes private ActionBar.LayoutParams mCustomViewLayoutParams; 394ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 404ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes @Override 414ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes protected void onCreate(Bundle savedInstanceState) { 424ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes super.onCreate(savedInstanceState); 434ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes setContentView(R.layout.toolbar_display_options); 444ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 454ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 464ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes setSupportActionBar(toolbar); 474ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 484ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.toggle_home_as_up).setOnClickListener(this); 494ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.toggle_show_home).setOnClickListener(this); 504ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.toggle_use_logo).setOnClickListener(this); 514ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.toggle_show_title).setOnClickListener(this); 524ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.toggle_show_custom).setOnClickListener(this); 534ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.cycle_custom_gravity).setOnClickListener(this); 544ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes findViewById(R.id.toggle_visibility).setOnClickListener(this); 554ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 564ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes // Configure several action bar elements that will be toggled by display options. 574ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes mCustomView = getLayoutInflater().inflate(R.layout.action_bar_display_options_custom, null); 584ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes mCustomViewLayoutParams = new ActionBar.LayoutParams( 594ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); 604ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 614ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 624ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes @Override 634ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes public boolean onCreateOptionsMenu(Menu menu) { 644ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes getMenuInflater().inflate(R.menu.display_options_actions, menu); 654ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes return true; 664ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 674ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 684ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes @Override 694ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes public boolean onSupportNavigateUp() { 704ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes finish(); 714ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes return true; 724ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 734ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 744ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes @Override 754ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes public void onClick(View v) { 764ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes final ActionBar bar = getSupportActionBar(); 774ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes int flags = 0; 784ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes switch (v.getId()) { 794ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.toggle_home_as_up: 804ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes flags = ActionBar.DISPLAY_HOME_AS_UP; 814ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 824ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.toggle_show_home: 834ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes flags = ActionBar.DISPLAY_SHOW_HOME; 844ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 854ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.toggle_use_logo: 864ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes flags = ActionBar.DISPLAY_USE_LOGO; 874ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes getSupportActionBar().setLogo(R.drawable.ic_media_play); 884ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 894ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.toggle_show_title: 904ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes flags = ActionBar.DISPLAY_SHOW_TITLE; 914ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 924ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.toggle_show_custom: 934ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes flags = ActionBar.DISPLAY_SHOW_CUSTOM; 944ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 954ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.cycle_custom_gravity: { 964ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes ActionBar.LayoutParams lp = mCustomViewLayoutParams; 974ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes int newGravity = 0; 984ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes switch (lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK) { 994ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case Gravity.LEFT: 1004ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes newGravity = Gravity.CENTER_HORIZONTAL; 1014ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 1024ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case Gravity.CENTER_HORIZONTAL: 1034ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes newGravity = Gravity.RIGHT; 1044ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 1054ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case Gravity.RIGHT: 1064ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes newGravity = Gravity.LEFT; 1074ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes break; 1084ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 1094ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes lp.gravity = lp.gravity & ~Gravity.HORIZONTAL_GRAVITY_MASK | newGravity; 1104ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes bar.setCustomView(mCustomView, lp); 1114ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes return; 1124ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 1134ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes case R.id.toggle_visibility: 1144ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes if (bar.isShowing()) { 1154ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes bar.hide(); 1164ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } else { 1174ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes bar.show(); 1184ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 1194ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes return; 1204ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 1214ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes 1224ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes int change = bar.getDisplayOptions() ^ flags; 1234ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes bar.setDisplayOptions(change, flags); 1244ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes } 1254ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes} 126