• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.app;
18 
19 import android.content.Context;
20 import android.content.res.TypedArray;
21 import android.graphics.drawable.Drawable;
22 import android.util.AttributeSet;
23 import android.view.Gravity;
24 import android.view.View;
25 import android.view.ViewDebug;
26 import android.view.ViewGroup;
27 import android.view.ViewGroup.MarginLayoutParams;
28 import android.view.Window;
29 import android.widget.SpinnerAdapter;
30 
31 /**
32  * A window feature at the top of the activity that may display the activity title, navigation
33  * modes, and other interactive items.
34  * <p>Beginning with Android 3.0 (API level 11), the action bar appears at the top of an
35  * activity's window when the activity uses the system's {@link
36  * android.R.style#Theme_Holo Holo} theme (or one of its descendant themes), which is the default.
37  * You may otherwise add the action bar by calling {@link
38  * android.view.Window#requestFeature requestFeature(FEATURE_ACTION_BAR)} or by declaring it in a
39  * custom theme with the {@link android.R.styleable#Theme_windowActionBar windowActionBar} property.
40  * <p>By default, the action bar shows the application icon on
41  * the left, followed by the activity title. If your activity has an options menu, you can make
42  * select items accessible directly from the action bar as "action items". You can also
43  * modify various characteristics of the action bar or remove it completely.</p>
44  * <p>From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link
45  * android.app.Activity#getActionBar getActionBar()}.</p>
46  * <p>In some cases, the action bar may be overlayed by another bar that enables contextual actions,
47  * using an {@link android.view.ActionMode}. For example, when the user selects one or more items in
48  * your activity, you can enable an action mode that offers actions specific to the selected
49  * items, with a UI that temporarily replaces the action bar. Although the UI may occupy the
50  * same space, the {@link android.view.ActionMode} APIs are distinct and independent from those for
51  * {@link ActionBar}.
52  * <div class="special reference">
53  * <h3>Developer Guides</h3>
54  * <p>For information about how to use the action bar, including how to add action items, navigation
55  * modes and more, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
56  * Bar</a> developer guide.</p>
57  * </div>
58  */
59 public abstract class ActionBar {
60     /**
61      * Standard navigation mode. Consists of either a logo or icon
62      * and title text with an optional subtitle. Clicking any of these elements
63      * will dispatch onOptionsItemSelected to the host Activity with
64      * a MenuItem with item ID android.R.id.home.
65      */
66     public static final int NAVIGATION_MODE_STANDARD = 0;
67 
68     /**
69      * List navigation mode. Instead of static title text this mode
70      * presents a list menu for navigation within the activity.
71      * e.g. this might be presented to the user as a dropdown list.
72      */
73     public static final int NAVIGATION_MODE_LIST = 1;
74 
75     /**
76      * Tab navigation mode. Instead of static title text this mode
77      * presents a series of tabs for navigation within the activity.
78      */
79     public static final int NAVIGATION_MODE_TABS = 2;
80 
81     /**
82      * Use logo instead of icon if available. This flag will cause appropriate
83      * navigation modes to use a wider logo in place of the standard icon.
84      *
85      * @see #setDisplayOptions(int)
86      * @see #setDisplayOptions(int, int)
87      */
88     public static final int DISPLAY_USE_LOGO = 0x1;
89 
90     /**
91      * Show 'home' elements in this action bar, leaving more space for other
92      * navigation elements. This includes logo and icon.
93      *
94      * @see #setDisplayOptions(int)
95      * @see #setDisplayOptions(int, int)
96      */
97     public static final int DISPLAY_SHOW_HOME = 0x2;
98 
99     /**
100      * Display the 'home' element such that it appears as an 'up' affordance.
101      * e.g. show an arrow to the left indicating the action that will be taken.
102      *
103      * Set this flag if selecting the 'home' button in the action bar to return
104      * up by a single level in your UI rather than back to the top level or front page.
105      *
106      * <p>Setting this option will implicitly enable interaction with the home/up
107      * button. See {@link #setHomeButtonEnabled(boolean)}.
108      *
109      * @see #setDisplayOptions(int)
110      * @see #setDisplayOptions(int, int)
111      */
112     public static final int DISPLAY_HOME_AS_UP = 0x4;
113 
114     /**
115      * Show the activity title and subtitle, if present.
116      *
117      * @see #setTitle(CharSequence)
118      * @see #setTitle(int)
119      * @see #setSubtitle(CharSequence)
120      * @see #setSubtitle(int)
121      * @see #setDisplayOptions(int)
122      * @see #setDisplayOptions(int, int)
123      */
124     public static final int DISPLAY_SHOW_TITLE = 0x8;
125 
126     /**
127      * Show the custom view if one has been set.
128      * @see #setCustomView(View)
129      * @see #setDisplayOptions(int)
130      * @see #setDisplayOptions(int, int)
131      */
132     public static final int DISPLAY_SHOW_CUSTOM = 0x10;
133 
134     /**
135      * Set the action bar into custom navigation mode, supplying a view
136      * for custom navigation.
137      *
138      * Custom navigation views appear between the application icon and
139      * any action buttons and may use any space available there. Common
140      * use cases for custom navigation views might include an auto-suggesting
141      * address bar for a browser or other navigation mechanisms that do not
142      * translate well to provided navigation modes.
143      *
144      * @param view Custom navigation view to place in the ActionBar.
145      */
setCustomView(View view)146     public abstract void setCustomView(View view);
147 
148     /**
149      * Set the action bar into custom navigation mode, supplying a view
150      * for custom navigation.
151      *
152      * <p>Custom navigation views appear between the application icon and
153      * any action buttons and may use any space available there. Common
154      * use cases for custom navigation views might include an auto-suggesting
155      * address bar for a browser or other navigation mechanisms that do not
156      * translate well to provided navigation modes.</p>
157      *
158      * <p>The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for
159      * the custom view to be displayed.</p>
160      *
161      * @param view Custom navigation view to place in the ActionBar.
162      * @param layoutParams How this custom view should layout in the bar.
163      *
164      * @see #setDisplayOptions(int, int)
165      */
setCustomView(View view, LayoutParams layoutParams)166     public abstract void setCustomView(View view, LayoutParams layoutParams);
167 
168     /**
169      * Set the action bar into custom navigation mode, supplying a view
170      * for custom navigation.
171      *
172      * <p>Custom navigation views appear between the application icon and
173      * any action buttons and may use any space available there. Common
174      * use cases for custom navigation views might include an auto-suggesting
175      * address bar for a browser or other navigation mechanisms that do not
176      * translate well to provided navigation modes.</p>
177      *
178      * <p>The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for
179      * the custom view to be displayed.</p>
180      *
181      * @param resId Resource ID of a layout to inflate into the ActionBar.
182      *
183      * @see #setDisplayOptions(int, int)
184      */
setCustomView(int resId)185     public abstract void setCustomView(int resId);
186 
187     /**
188      * Set the icon to display in the 'home' section of the action bar.
189      * The action bar will use an icon specified by its style or the
190      * activity icon by default.
191      *
192      * Whether the home section shows an icon or logo is controlled
193      * by the display option {@link #DISPLAY_USE_LOGO}.
194      *
195      * @param resId Resource ID of a drawable to show as an icon.
196      *
197      * @see #setDisplayUseLogoEnabled(boolean)
198      * @see #setDisplayShowHomeEnabled(boolean)
199      */
setIcon(int resId)200     public abstract void setIcon(int resId);
201 
202     /**
203      * Set the icon to display in the 'home' section of the action bar.
204      * The action bar will use an icon specified by its style or the
205      * activity icon by default.
206      *
207      * Whether the home section shows an icon or logo is controlled
208      * by the display option {@link #DISPLAY_USE_LOGO}.
209      *
210      * @param icon Drawable to show as an icon.
211      *
212      * @see #setDisplayUseLogoEnabled(boolean)
213      * @see #setDisplayShowHomeEnabled(boolean)
214      */
setIcon(Drawable icon)215     public abstract void setIcon(Drawable icon);
216 
217     /**
218      * Set the logo to display in the 'home' section of the action bar.
219      * The action bar will use a logo specified by its style or the
220      * activity logo by default.
221      *
222      * Whether the home section shows an icon or logo is controlled
223      * by the display option {@link #DISPLAY_USE_LOGO}.
224      *
225      * @param resId Resource ID of a drawable to show as a logo.
226      *
227      * @see #setDisplayUseLogoEnabled(boolean)
228      * @see #setDisplayShowHomeEnabled(boolean)
229      */
setLogo(int resId)230     public abstract void setLogo(int resId);
231 
232     /**
233      * Set the logo to display in the 'home' section of the action bar.
234      * The action bar will use a logo specified by its style or the
235      * activity logo by default.
236      *
237      * Whether the home section shows an icon or logo is controlled
238      * by the display option {@link #DISPLAY_USE_LOGO}.
239      *
240      * @param logo Drawable to show as a logo.
241      *
242      * @see #setDisplayUseLogoEnabled(boolean)
243      * @see #setDisplayShowHomeEnabled(boolean)
244      */
setLogo(Drawable logo)245     public abstract void setLogo(Drawable logo);
246 
247     /**
248      * Set the adapter and navigation callback for list navigation mode.
249      *
250      * The supplied adapter will provide views for the expanded list as well as
251      * the currently selected item. (These may be displayed differently.)
252      *
253      * The supplied OnNavigationListener will alert the application when the user
254      * changes the current list selection.
255      *
256      * @param adapter An adapter that will provide views both to display
257      *                the current navigation selection and populate views
258      *                within the dropdown navigation menu.
259      * @param callback An OnNavigationListener that will receive events when the user
260      *                 selects a navigation item.
261      */
setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback)262     public abstract void setListNavigationCallbacks(SpinnerAdapter adapter,
263             OnNavigationListener callback);
264 
265     /**
266      * Set the selected navigation item in list or tabbed navigation modes.
267      *
268      * @param position Position of the item to select.
269      */
setSelectedNavigationItem(int position)270     public abstract void setSelectedNavigationItem(int position);
271 
272     /**
273      * Get the position of the selected navigation item in list or tabbed navigation modes.
274      *
275      * @return Position of the selected item.
276      */
getSelectedNavigationIndex()277     public abstract int getSelectedNavigationIndex();
278 
279     /**
280      * Get the number of navigation items present in the current navigation mode.
281      *
282      * @return Number of navigation items.
283      */
getNavigationItemCount()284     public abstract int getNavigationItemCount();
285 
286     /**
287      * Set the action bar's title. This will only be displayed if
288      * {@link #DISPLAY_SHOW_TITLE} is set.
289      *
290      * @param title Title to set
291      *
292      * @see #setTitle(int)
293      * @see #setDisplayOptions(int, int)
294      */
setTitle(CharSequence title)295     public abstract void setTitle(CharSequence title);
296 
297     /**
298      * Set the action bar's title. This will only be displayed if
299      * {@link #DISPLAY_SHOW_TITLE} is set.
300      *
301      * @param resId Resource ID of title string to set
302      *
303      * @see #setTitle(CharSequence)
304      * @see #setDisplayOptions(int, int)
305      */
setTitle(int resId)306     public abstract void setTitle(int resId);
307 
308     /**
309      * Set the action bar's subtitle. This will only be displayed if
310      * {@link #DISPLAY_SHOW_TITLE} is set. Set to null to disable the
311      * subtitle entirely.
312      *
313      * @param subtitle Subtitle to set
314      *
315      * @see #setSubtitle(int)
316      * @see #setDisplayOptions(int, int)
317      */
setSubtitle(CharSequence subtitle)318     public abstract void setSubtitle(CharSequence subtitle);
319 
320     /**
321      * Set the action bar's subtitle. This will only be displayed if
322      * {@link #DISPLAY_SHOW_TITLE} is set.
323      *
324      * @param resId Resource ID of subtitle string to set
325      *
326      * @see #setSubtitle(CharSequence)
327      * @see #setDisplayOptions(int, int)
328      */
setSubtitle(int resId)329     public abstract void setSubtitle(int resId);
330 
331     /**
332      * Set display options. This changes all display option bits at once. To change
333      * a limited subset of display options, see {@link #setDisplayOptions(int, int)}.
334      *
335      * @param options A combination of the bits defined by the DISPLAY_ constants
336      *                defined in ActionBar.
337      */
setDisplayOptions(int options)338     public abstract void setDisplayOptions(int options);
339 
340     /**
341      * Set selected display options. Only the options specified by mask will be changed.
342      * To change all display option bits at once, see {@link #setDisplayOptions(int)}.
343      *
344      * <p>Example: setDisplayOptions(0, DISPLAY_SHOW_HOME) will disable the
345      * {@link #DISPLAY_SHOW_HOME} option.
346      * setDisplayOptions(DISPLAY_SHOW_HOME, DISPLAY_SHOW_HOME | DISPLAY_USE_LOGO)
347      * will enable {@link #DISPLAY_SHOW_HOME} and disable {@link #DISPLAY_USE_LOGO}.
348      *
349      * @param options A combination of the bits defined by the DISPLAY_ constants
350      *                defined in ActionBar.
351      * @param mask A bit mask declaring which display options should be changed.
352      */
setDisplayOptions(int options, int mask)353     public abstract void setDisplayOptions(int options, int mask);
354 
355     /**
356      * Set whether to display the activity logo rather than the activity icon.
357      * A logo is often a wider, more detailed image.
358      *
359      * <p>To set several display options at once, see the setDisplayOptions methods.
360      *
361      * @param useLogo true to use the activity logo, false to use the activity icon.
362      *
363      * @see #setDisplayOptions(int)
364      * @see #setDisplayOptions(int, int)
365      */
setDisplayUseLogoEnabled(boolean useLogo)366     public abstract void setDisplayUseLogoEnabled(boolean useLogo);
367 
368     /**
369      * Set whether to include the application home affordance in the action bar.
370      * Home is presented as either an activity icon or logo.
371      *
372      * <p>To set several display options at once, see the setDisplayOptions methods.
373      *
374      * @param showHome true to show home, false otherwise.
375      *
376      * @see #setDisplayOptions(int)
377      * @see #setDisplayOptions(int, int)
378      */
setDisplayShowHomeEnabled(boolean showHome)379     public abstract void setDisplayShowHomeEnabled(boolean showHome);
380 
381     /**
382      * Set whether home should be displayed as an "up" affordance.
383      * Set this to true if selecting "home" returns up by a single level in your UI
384      * rather than back to the top level or front page.
385      *
386      * <p>To set several display options at once, see the setDisplayOptions methods.
387      *
388      * @param showHomeAsUp true to show the user that selecting home will return one
389      *                     level up rather than to the top level of the app.
390      *
391      * @see #setDisplayOptions(int)
392      * @see #setDisplayOptions(int, int)
393      */
setDisplayHomeAsUpEnabled(boolean showHomeAsUp)394     public abstract void setDisplayHomeAsUpEnabled(boolean showHomeAsUp);
395 
396     /**
397      * Set whether an activity title/subtitle should be displayed.
398      *
399      * <p>To set several display options at once, see the setDisplayOptions methods.
400      *
401      * @param showTitle true to display a title/subtitle if present.
402      *
403      * @see #setDisplayOptions(int)
404      * @see #setDisplayOptions(int, int)
405      */
setDisplayShowTitleEnabled(boolean showTitle)406     public abstract void setDisplayShowTitleEnabled(boolean showTitle);
407 
408     /**
409      * Set whether a custom view should be displayed, if set.
410      *
411      * <p>To set several display options at once, see the setDisplayOptions methods.
412      *
413      * @param showCustom true if the currently set custom view should be displayed, false otherwise.
414      *
415      * @see #setDisplayOptions(int)
416      * @see #setDisplayOptions(int, int)
417      */
setDisplayShowCustomEnabled(boolean showCustom)418     public abstract void setDisplayShowCustomEnabled(boolean showCustom);
419 
420     /**
421      * Set the ActionBar's background. This will be used for the primary
422      * action bar.
423      *
424      * @param d Background drawable
425      * @see #setStackedBackgroundDrawable(Drawable)
426      * @see #setSplitBackgroundDrawable(Drawable)
427      */
setBackgroundDrawable(Drawable d)428     public abstract void setBackgroundDrawable(Drawable d);
429 
430     /**
431      * Set the ActionBar's stacked background. This will appear
432      * in the second row/stacked bar on some devices and configurations.
433      *
434      * @param d Background drawable for the stacked row
435      */
setStackedBackgroundDrawable(Drawable d)436     public void setStackedBackgroundDrawable(Drawable d) { }
437 
438     /**
439      * Set the ActionBar's split background. This will appear in
440      * the split action bar containing menu-provided action buttons
441      * on some devices and configurations.
442      * <p>You can enable split action bar with {@link android.R.attr#uiOptions}
443      *
444      * @param d Background drawable for the split bar
445      */
setSplitBackgroundDrawable(Drawable d)446     public void setSplitBackgroundDrawable(Drawable d) { }
447 
448     /**
449      * @return The current custom view.
450      */
getCustomView()451     public abstract View getCustomView();
452 
453     /**
454      * Returns the current ActionBar title in standard mode.
455      * Returns null if {@link #getNavigationMode()} would not return
456      * {@link #NAVIGATION_MODE_STANDARD}.
457      *
458      * @return The current ActionBar title or null.
459      */
getTitle()460     public abstract CharSequence getTitle();
461 
462     /**
463      * Returns the current ActionBar subtitle in standard mode.
464      * Returns null if {@link #getNavigationMode()} would not return
465      * {@link #NAVIGATION_MODE_STANDARD}.
466      *
467      * @return The current ActionBar subtitle or null.
468      */
getSubtitle()469     public abstract CharSequence getSubtitle();
470 
471     /**
472      * Returns the current navigation mode. The result will be one of:
473      * <ul>
474      * <li>{@link #NAVIGATION_MODE_STANDARD}</li>
475      * <li>{@link #NAVIGATION_MODE_LIST}</li>
476      * <li>{@link #NAVIGATION_MODE_TABS}</li>
477      * </ul>
478      *
479      * @return The current navigation mode.
480      */
getNavigationMode()481     public abstract int getNavigationMode();
482 
483     /**
484      * Set the current navigation mode.
485      *
486      * @param mode The new mode to set.
487      * @see #NAVIGATION_MODE_STANDARD
488      * @see #NAVIGATION_MODE_LIST
489      * @see #NAVIGATION_MODE_TABS
490      */
setNavigationMode(int mode)491     public abstract void setNavigationMode(int mode);
492 
493     /**
494      * @return The current set of display options.
495      */
getDisplayOptions()496     public abstract int getDisplayOptions();
497 
498     /**
499      * Create and return a new {@link Tab}.
500      * This tab will not be included in the action bar until it is added.
501      *
502      * <p>Very often tabs will be used to switch between {@link Fragment}
503      * objects.  Here is a typical implementation of such tabs:</p>
504      *
505      * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.java
506      *      complete}
507      *
508      * @return A new Tab
509      *
510      * @see #addTab(Tab)
511      */
newTab()512     public abstract Tab newTab();
513 
514     /**
515      * Add a tab for use in tabbed navigation mode. The tab will be added at the end of the list.
516      * If this is the first tab to be added it will become the selected tab.
517      *
518      * @param tab Tab to add
519      */
addTab(Tab tab)520     public abstract void addTab(Tab tab);
521 
522     /**
523      * Add a tab for use in tabbed navigation mode. The tab will be added at the end of the list.
524      *
525      * @param tab Tab to add
526      * @param setSelected True if the added tab should become the selected tab.
527      */
addTab(Tab tab, boolean setSelected)528     public abstract void addTab(Tab tab, boolean setSelected);
529 
530     /**
531      * Add a tab for use in tabbed navigation mode. The tab will be inserted at
532      * <code>position</code>. If this is the first tab to be added it will become
533      * the selected tab.
534      *
535      * @param tab The tab to add
536      * @param position The new position of the tab
537      */
addTab(Tab tab, int position)538     public abstract void addTab(Tab tab, int position);
539 
540     /**
541      * Add a tab for use in tabbed navigation mode. The tab will be insterted at
542      * <code>position</code>.
543      *
544      * @param tab The tab to add
545      * @param position The new position of the tab
546      * @param setSelected True if the added tab should become the selected tab.
547      */
addTab(Tab tab, int position, boolean setSelected)548     public abstract void addTab(Tab tab, int position, boolean setSelected);
549 
550     /**
551      * Remove a tab from the action bar. If the removed tab was selected it will be deselected
552      * and another tab will be selected if present.
553      *
554      * @param tab The tab to remove
555      */
removeTab(Tab tab)556     public abstract void removeTab(Tab tab);
557 
558     /**
559      * Remove a tab from the action bar. If the removed tab was selected it will be deselected
560      * and another tab will be selected if present.
561      *
562      * @param position Position of the tab to remove
563      */
removeTabAt(int position)564     public abstract void removeTabAt(int position);
565 
566     /**
567      * Remove all tabs from the action bar and deselect the current tab.
568      */
removeAllTabs()569     public abstract void removeAllTabs();
570 
571     /**
572      * Select the specified tab. If it is not a child of this action bar it will be added.
573      *
574      * <p>Note: If you want to select by index, use {@link #setSelectedNavigationItem(int)}.</p>
575      *
576      * @param tab Tab to select
577      */
selectTab(Tab tab)578     public abstract void selectTab(Tab tab);
579 
580     /**
581      * Returns the currently selected tab if in tabbed navigation mode and there is at least
582      * one tab present.
583      *
584      * @return The currently selected tab or null
585      */
getSelectedTab()586     public abstract Tab getSelectedTab();
587 
588     /**
589      * Returns the tab at the specified index.
590      *
591      * @param index Index value in the range 0-get
592      * @return
593      */
getTabAt(int index)594     public abstract Tab getTabAt(int index);
595 
596     /**
597      * Returns the number of tabs currently registered with the action bar.
598      * @return Tab count
599      */
getTabCount()600     public abstract int getTabCount();
601 
602     /**
603      * Retrieve the current height of the ActionBar.
604      *
605      * @return The ActionBar's height
606      */
getHeight()607     public abstract int getHeight();
608 
609     /**
610      * Show the ActionBar if it is not currently showing.
611      * If the window hosting the ActionBar does not have the feature
612      * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
613      * content to fit the new space available.
614      */
show()615     public abstract void show();
616 
617     /**
618      * Hide the ActionBar if it is currently showing.
619      * If the window hosting the ActionBar does not have the feature
620      * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
621      * content to fit the new space available.
622      */
hide()623     public abstract void hide();
624 
625     /**
626      * @return <code>true</code> if the ActionBar is showing, <code>false</code> otherwise.
627      */
isShowing()628     public abstract boolean isShowing();
629 
630     /**
631      * Add a listener that will respond to menu visibility change events.
632      *
633      * @param listener The new listener to add
634      */
addOnMenuVisibilityListener(OnMenuVisibilityListener listener)635     public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);
636 
637     /**
638      * Remove a menu visibility listener. This listener will no longer receive menu
639      * visibility change events.
640      *
641      * @param listener A listener to remove that was previously added
642      */
removeOnMenuVisibilityListener(OnMenuVisibilityListener listener)643     public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);
644 
645     /**
646      * Enable or disable the "home" button in the corner of the action bar. (Note that this
647      * is the application home/up affordance on the action bar, not the systemwide home
648      * button.)
649      *
650      * <p>This defaults to true for packages targeting &lt; API 14. For packages targeting
651      * API 14 or greater, the application should call this method to enable interaction
652      * with the home/up affordance.
653      *
654      * <p>Setting the {@link #DISPLAY_HOME_AS_UP} display option will automatically enable
655      * the home button.
656      *
657      * @param enabled true to enable the home button, false to disable the home button.
658      */
setHomeButtonEnabled(boolean enabled)659     public void setHomeButtonEnabled(boolean enabled) { }
660 
661     /**
662      * Returns a {@link Context} with an appropriate theme for creating views that
663      * will appear in the action bar. If you are inflating or instantiating custom views
664      * that will appear in an action bar, you should use the Context returned by this method.
665      * (This includes adapters used for list navigation mode.)
666      * This will ensure that views contrast properly against the action bar.
667      *
668      * @return A themed Context for creating views
669      */
getThemedContext()670     public Context getThemedContext() { return null; }
671 
672     /**
673      * Listener interface for ActionBar navigation events.
674      */
675     public interface OnNavigationListener {
676         /**
677          * This method is called whenever a navigation item in your action bar
678          * is selected.
679          *
680          * @param itemPosition Position of the item clicked.
681          * @param itemId ID of the item clicked.
682          * @return True if the event was handled, false otherwise.
683          */
onNavigationItemSelected(int itemPosition, long itemId)684         public boolean onNavigationItemSelected(int itemPosition, long itemId);
685     }
686 
687     /**
688      * Listener for receiving events when action bar menus are shown or hidden.
689      */
690     public interface OnMenuVisibilityListener {
691         /**
692          * Called when an action bar menu is shown or hidden. Applications may want to use
693          * this to tune auto-hiding behavior for the action bar or pause/resume video playback,
694          * gameplay, or other activity within the main content area.
695          *
696          * @param isVisible True if an action bar menu is now visible, false if no action bar
697          *                  menus are visible.
698          */
onMenuVisibilityChanged(boolean isVisible)699         public void onMenuVisibilityChanged(boolean isVisible);
700     }
701 
702     /**
703      * A tab in the action bar.
704      *
705      * <p>Tabs manage the hiding and showing of {@link Fragment}s.
706      */
707     public static abstract class Tab {
708         /**
709          * An invalid position for a tab.
710          *
711          * @see #getPosition()
712          */
713         public static final int INVALID_POSITION = -1;
714 
715         /**
716          * Return the current position of this tab in the action bar.
717          *
718          * @return Current position, or {@link #INVALID_POSITION} if this tab is not currently in
719          *         the action bar.
720          */
getPosition()721         public abstract int getPosition();
722 
723         /**
724          * Return the icon associated with this tab.
725          *
726          * @return The tab's icon
727          */
getIcon()728         public abstract Drawable getIcon();
729 
730         /**
731          * Return the text of this tab.
732          *
733          * @return The tab's text
734          */
getText()735         public abstract CharSequence getText();
736 
737         /**
738          * Set the icon displayed on this tab.
739          *
740          * @param icon The drawable to use as an icon
741          * @return The current instance for call chaining
742          */
setIcon(Drawable icon)743         public abstract Tab setIcon(Drawable icon);
744 
745         /**
746          * Set the icon displayed on this tab.
747          *
748          * @param resId Resource ID referring to the drawable to use as an icon
749          * @return The current instance for call chaining
750          */
setIcon(int resId)751         public abstract Tab setIcon(int resId);
752 
753         /**
754          * Set the text displayed on this tab. Text may be truncated if there is not
755          * room to display the entire string.
756          *
757          * @param text The text to display
758          * @return The current instance for call chaining
759          */
setText(CharSequence text)760         public abstract Tab setText(CharSequence text);
761 
762         /**
763          * Set the text displayed on this tab. Text may be truncated if there is not
764          * room to display the entire string.
765          *
766          * @param resId A resource ID referring to the text that should be displayed
767          * @return The current instance for call chaining
768          */
setText(int resId)769         public abstract Tab setText(int resId);
770 
771         /**
772          * Set a custom view to be used for this tab. This overrides values set by
773          * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}.
774          *
775          * @param view Custom view to be used as a tab.
776          * @return The current instance for call chaining
777          */
setCustomView(View view)778         public abstract Tab setCustomView(View view);
779 
780         /**
781          * Set a custom view to be used for this tab. This overrides values set by
782          * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}.
783          *
784          * @param layoutResId A layout resource to inflate and use as a custom tab view
785          * @return The current instance for call chaining
786          */
setCustomView(int layoutResId)787         public abstract Tab setCustomView(int layoutResId);
788 
789         /**
790          * Retrieve a previously set custom view for this tab.
791          *
792          * @return The custom view set by {@link #setCustomView(View)}.
793          */
getCustomView()794         public abstract View getCustomView();
795 
796         /**
797          * Give this Tab an arbitrary object to hold for later use.
798          *
799          * @param obj Object to store
800          * @return The current instance for call chaining
801          */
setTag(Object obj)802         public abstract Tab setTag(Object obj);
803 
804         /**
805          * @return This Tab's tag object.
806          */
getTag()807         public abstract Object getTag();
808 
809         /**
810          * Set the {@link TabListener} that will handle switching to and from this tab.
811          * All tabs must have a TabListener set before being added to the ActionBar.
812          *
813          * @param listener Listener to handle tab selection events
814          * @return The current instance for call chaining
815          */
setTabListener(TabListener listener)816         public abstract Tab setTabListener(TabListener listener);
817 
818         /**
819          * Select this tab. Only valid if the tab has been added to the action bar.
820          */
select()821         public abstract void select();
822 
823         /**
824          * Set a description of this tab's content for use in accessibility support.
825          * If no content description is provided the title will be used.
826          *
827          * @param resId A resource ID referring to the description text
828          * @return The current instance for call chaining
829          * @see #setContentDescription(CharSequence)
830          * @see #getContentDescription()
831          */
setContentDescription(int resId)832         public abstract Tab setContentDescription(int resId);
833 
834         /**
835          * Set a description of this tab's content for use in accessibility support.
836          * If no content description is provided the title will be used.
837          *
838          * @param contentDesc Description of this tab's content
839          * @return The current instance for call chaining
840          * @see #setContentDescription(int)
841          * @see #getContentDescription()
842          */
setContentDescription(CharSequence contentDesc)843         public abstract Tab setContentDescription(CharSequence contentDesc);
844 
845         /**
846          * Gets a brief description of this tab's content for use in accessibility support.
847          *
848          * @return Description of this tab's content
849          * @see #setContentDescription(CharSequence)
850          * @see #setContentDescription(int)
851          */
getContentDescription()852         public abstract CharSequence getContentDescription();
853     }
854 
855     /**
856      * Callback interface invoked when a tab is focused, unfocused, added, or removed.
857      */
858     public interface TabListener {
859         /**
860          * Called when a tab enters the selected state.
861          *
862          * @param tab The tab that was selected
863          * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
864          *        during a tab switch. The previous tab's unselect and this tab's select will be
865          *        executed in a single transaction. This FragmentTransaction does not support
866          *        being added to the back stack.
867          */
onTabSelected(Tab tab, FragmentTransaction ft)868         public void onTabSelected(Tab tab, FragmentTransaction ft);
869 
870         /**
871          * Called when a tab exits the selected state.
872          *
873          * @param tab The tab that was unselected
874          * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
875          *        during a tab switch. This tab's unselect and the newly selected tab's select
876          *        will be executed in a single transaction. This FragmentTransaction does not
877          *        support being added to the back stack.
878          */
onTabUnselected(Tab tab, FragmentTransaction ft)879         public void onTabUnselected(Tab tab, FragmentTransaction ft);
880 
881         /**
882          * Called when a tab that is already selected is chosen again by the user.
883          * Some applications may use this action to return to the top level of a category.
884          *
885          * @param tab The tab that was reselected.
886          * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
887          *        once this method returns. This FragmentTransaction does not support
888          *        being added to the back stack.
889          */
onTabReselected(Tab tab, FragmentTransaction ft)890         public void onTabReselected(Tab tab, FragmentTransaction ft);
891     }
892 
893     /**
894      * Per-child layout information associated with action bar custom views.
895      *
896      * @attr ref android.R.styleable#ActionBar_LayoutParams_layout_gravity
897      */
898     public static class LayoutParams extends MarginLayoutParams {
899         /**
900          * Gravity for the view associated with these LayoutParams.
901          *
902          * @see android.view.Gravity
903          */
904         @ViewDebug.ExportedProperty(category = "layout", mapping = {
905             @ViewDebug.IntToString(from =  -1,                       to = "NONE"),
906             @ViewDebug.IntToString(from = Gravity.NO_GRAVITY,        to = "NONE"),
907             @ViewDebug.IntToString(from = Gravity.TOP,               to = "TOP"),
908             @ViewDebug.IntToString(from = Gravity.BOTTOM,            to = "BOTTOM"),
909             @ViewDebug.IntToString(from = Gravity.LEFT,              to = "LEFT"),
910             @ViewDebug.IntToString(from = Gravity.RIGHT,             to = "RIGHT"),
911             @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL,   to = "CENTER_VERTICAL"),
912             @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL,     to = "FILL_VERTICAL"),
913             @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"),
914             @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL,   to = "FILL_HORIZONTAL"),
915             @ViewDebug.IntToString(from = Gravity.CENTER,            to = "CENTER"),
916             @ViewDebug.IntToString(from = Gravity.FILL,              to = "FILL")
917         })
918         public int gravity = -1;
919 
LayoutParams(Context c, AttributeSet attrs)920         public LayoutParams(Context c, AttributeSet attrs) {
921             super(c, attrs);
922 
923             TypedArray a = c.obtainStyledAttributes(attrs,
924                     com.android.internal.R.styleable.ActionBar_LayoutParams);
925             gravity = a.getInt(
926                     com.android.internal.R.styleable.ActionBar_LayoutParams_layout_gravity, -1);
927             a.recycle();
928         }
929 
LayoutParams(int width, int height)930         public LayoutParams(int width, int height) {
931             super(width, height);
932             this.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT;
933         }
934 
LayoutParams(int width, int height, int gravity)935         public LayoutParams(int width, int height, int gravity) {
936             super(width, height);
937             this.gravity = gravity;
938         }
939 
LayoutParams(int gravity)940         public LayoutParams(int gravity) {
941             this(WRAP_CONTENT, MATCH_PARENT, gravity);
942         }
943 
LayoutParams(LayoutParams source)944         public LayoutParams(LayoutParams source) {
945             super(source);
946 
947             this.gravity = source.gravity;
948         }
949 
LayoutParams(ViewGroup.LayoutParams source)950         public LayoutParams(ViewGroup.LayoutParams source) {
951             super(source);
952         }
953     }
954 }
955