ToolbarDisplayOptions.java revision 4ff4aa9fc5ea370fdf2f187b1f3100b0626b5755
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.v4.app.FragmentTransaction;
234ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.support.v7.app.ActionBar;
244ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.support.v7.app.ActionBar.Tab;
254ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.support.v7.app.ActionBarActivity;
264ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.support.v7.widget.Toolbar;
274ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.Gravity;
284ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.Menu;
294ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.View;
304ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.view.ViewGroup.LayoutParams;
314ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.widget.ArrayAdapter;
324ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banesimport android.widget.Toast;
334ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
344ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes/**
354ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * This demo shows how various action bar display option flags can be combined and their effects
364ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes * when used on a Toolbar-provided Action Bar
374ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes */
384ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banespublic class ToolbarDisplayOptions extends ActionBarActivity
394ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        implements View.OnClickListener {
404ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
414ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    private View mCustomView;
424ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    private ActionBar.LayoutParams mCustomViewLayoutParams;
434ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
444ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    @Override
454ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    protected void onCreate(Bundle savedInstanceState) {
464ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        super.onCreate(savedInstanceState);
474ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        setContentView(R.layout.toolbar_display_options);
484ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
494ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
504ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        setSupportActionBar(toolbar);
514ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
524ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.toggle_home_as_up).setOnClickListener(this);
534ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.toggle_show_home).setOnClickListener(this);
544ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.toggle_use_logo).setOnClickListener(this);
554ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.toggle_show_title).setOnClickListener(this);
564ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.toggle_show_custom).setOnClickListener(this);
574ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.cycle_custom_gravity).setOnClickListener(this);
584ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        findViewById(R.id.toggle_visibility).setOnClickListener(this);
594ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
604ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        // Configure several action bar elements that will be toggled by display options.
614ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        mCustomView = getLayoutInflater().inflate(R.layout.action_bar_display_options_custom, null);
624ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        mCustomViewLayoutParams = new ActionBar.LayoutParams(
634ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
644ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
654ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
664ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    @Override
674ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    public boolean onCreateOptionsMenu(Menu menu) {
684ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        getMenuInflater().inflate(R.menu.display_options_actions, menu);
694ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        return true;
704ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
714ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
724ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    @Override
734ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    public boolean onSupportNavigateUp() {
744ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        finish();
754ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        return true;
764ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
774ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
784ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    @Override
794ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    public void onClick(View v) {
804ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        final ActionBar bar = getSupportActionBar();
814ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        int flags = 0;
824ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        switch (v.getId()) {
834ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.toggle_home_as_up:
844ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                flags = ActionBar.DISPLAY_HOME_AS_UP;
854ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                break;
864ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.toggle_show_home:
874ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                flags = ActionBar.DISPLAY_SHOW_HOME;
884ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                break;
894ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.toggle_use_logo:
904ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                flags = ActionBar.DISPLAY_USE_LOGO;
914ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                getSupportActionBar().setLogo(R.drawable.ic_media_play);
924ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                break;
934ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.toggle_show_title:
944ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                flags = ActionBar.DISPLAY_SHOW_TITLE;
954ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                break;
964ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.toggle_show_custom:
974ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                flags = ActionBar.DISPLAY_SHOW_CUSTOM;
984ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                break;
994ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.cycle_custom_gravity: {
1004ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                ActionBar.LayoutParams lp = mCustomViewLayoutParams;
1014ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                int newGravity = 0;
1024ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                switch (lp.gravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
1034ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    case Gravity.LEFT:
1044ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                        newGravity = Gravity.CENTER_HORIZONTAL;
1054ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                        break;
1064ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    case Gravity.CENTER_HORIZONTAL:
1074ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                        newGravity = Gravity.RIGHT;
1084ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                        break;
1094ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    case Gravity.RIGHT:
1104ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                        newGravity = Gravity.LEFT;
1114ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                        break;
1124ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                }
1134ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                lp.gravity = lp.gravity & ~Gravity.HORIZONTAL_GRAVITY_MASK | newGravity;
1144ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                bar.setCustomView(mCustomView, lp);
1154ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                return;
1164ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            }
1174ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes            case R.id.toggle_visibility:
1184ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                if (bar.isShowing()) {
1194ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    bar.hide();
1204ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                } else {
1214ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                    bar.show();
1224ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                }
1234ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes                return;
1244ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        }
1254ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes
1264ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        int change = bar.getDisplayOptions() ^ flags;
1274ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes        bar.setDisplayOptions(change, flags);
1284ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes    }
1294ff4aa9fc5ea370fdf2f187b1f3100b0626b5755Chris Banes}
130