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