• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2012 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.support.v7.app;
18 
19 import android.content.Context;
20 import android.content.res.Configuration;
21 import android.content.res.TypedArray;
22 import android.graphics.drawable.Drawable;
23 import android.support.annotation.DrawableRes;
24 import android.support.annotation.IntDef;
25 import android.support.annotation.NonNull;
26 import android.support.annotation.Nullable;
27 import android.support.annotation.RestrictTo;
28 import android.support.annotation.StringRes;
29 import android.support.v4.app.Fragment;
30 import android.support.v4.app.FragmentTransaction;
31 import android.support.v4.view.GravityCompat;
32 import android.support.v7.appcompat.R;
33 import android.support.v7.view.ActionMode;
34 import android.util.AttributeSet;
35 import android.view.Gravity;
36 import android.view.KeyEvent;
37 import android.view.View;
38 import android.view.ViewGroup;
39 import android.view.Window;
40 import android.widget.SpinnerAdapter;
41 
42 import java.lang.annotation.Retention;
43 import java.lang.annotation.RetentionPolicy;
44 
45 import static android.support.annotation.RestrictTo.Scope.GROUP_ID;
46 
47 /**
48  * A primary toolbar within the activity that may display the activity title, application-level
49  * navigation affordances, and other interactive items.
50  *
51  * <p>The action bar appears at the top of an activity's window when the activity uses the
52  * AppCompat's {@link R.style#Theme_AppCompat AppCompat} theme (or one of its descendant themes).
53  * You may otherwise add the action bar by calling {@link
54  * AppCompatDelegate#requestWindowFeature(int)  requestFeature(FEATURE_SUPPORT_ACTION_BAR)} or by
55  * declaring it in a custom theme with the
56  * {@link R.styleable#AppCompatTheme_windowActionBar windowActionBar} property.</p>
57  *
58  * <p>The action bar may be represented by any Toolbar widget within the application layout.
59  * The application may signal to the Activity which Toolbar should be treated as the Activity's
60  * action bar. Activities that use this feature should use one of the supplied
61  * <code>.NoActionBar</code> themes, set the
62  * {@link R.styleable#AppCompatTheme_windowActionBar windowActionBar} attribute to
63  * <code>false</code> or otherwise not request the window feature.</p>
64  *
65  * <p>If your activity has an options menu, you can make select items accessible directly from the
66  * action bar as "action items". You can also  modify various characteristics of the action bar or
67  * remove it completely.</p>
68  *
69  * <p>The navigation button (formerly "Home") takes over the space previously occupied by the
70  * application icon. Apps wishing to express a stronger branding should use their brand colors
71  * heavily in the action bar and other application chrome or use a {@link #setLogo(int) logo}
72  * in place of their standard title text.</p>
73  *
74  * <p>From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link
75  * AppCompatActivity#getSupportActionBar()}  getSupportActionBar()}.</p>
76  *
77  * <p>In some cases, the action bar may be overlayed by another bar that enables contextual actions,
78  * using an {@link ActionMode}. For example, when the user selects one or more items in
79  * your activity, you can enable an action mode that offers actions specific to the selected
80  * items, with a UI that temporarily replaces the action bar. Although the UI may occupy the
81  * same space, the {@link ActionMode} APIs are distinct and independent from those for
82  * {@link ActionBar}.</p>
83  *
84  * <div class="special reference">
85  * <h3>Developer Guides</h3>
86  * <p>For information about how to use the action bar, including how to add action items, navigation
87  * modes and more, read the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action
88  * Bar</a> developer guide.</p>
89  * </div>
90  */
91 public abstract class ActionBar {
92 
93     /** @hide */
94     @RestrictTo(GROUP_ID)
95     @Retention(RetentionPolicy.SOURCE)
96     @IntDef({NAVIGATION_MODE_STANDARD, NAVIGATION_MODE_LIST, NAVIGATION_MODE_TABS})
97     public @interface NavigationMode {}
98 
99     /**
100      * Standard navigation mode. Consists of either a logo or icon
101      * and title text with an optional subtitle. Clicking any of these elements
102      * will dispatch onOptionsItemSelected to the host Activity with
103      * a MenuItem with item ID android.R.id.home.
104      *
105      * @deprecated Action bar navigation modes are deprecated and not supported by inline
106      * toolbar action bars. Consider using other
107      * <a href="http://developer.android.com/design/patterns/navigation.html">common
108      * navigation patterns</a> instead.
109      */
110     @Deprecated
111     public static final int NAVIGATION_MODE_STANDARD = 0;
112 
113     /**
114      * List navigation mode. Instead of static title text this mode
115      * presents a list menu for navigation within the activity.
116      * e.g. this might be presented to the user as a dropdown list.
117      *
118      * @deprecated Action bar navigation modes are deprecated and not supported by inline
119      * toolbar action bars. Consider using other
120      * <a href="http://developer.android.com/design/patterns/navigation.html">common
121      * navigation patterns</a> instead.
122      */
123     @Deprecated
124     public static final int NAVIGATION_MODE_LIST = 1;
125 
126     /**
127      * Tab navigation mode. Instead of static title text this mode
128      * presents a series of tabs for navigation within the activity.
129      *
130      * @deprecated Action bar navigation modes are deprecated and not supported by inline
131      * toolbar action bars. Consider using other
132      * <a href="http://developer.android.com/design/patterns/navigation.html">common
133      * navigation patterns</a> instead.
134      */
135     @Deprecated
136     public static final int NAVIGATION_MODE_TABS = 2;
137 
138     /** @hide */
139     @RestrictTo(GROUP_ID)
140     @IntDef(flag=true, value={
141             DISPLAY_USE_LOGO,
142             DISPLAY_SHOW_HOME,
143             DISPLAY_HOME_AS_UP,
144             DISPLAY_SHOW_TITLE,
145             DISPLAY_SHOW_CUSTOM
146     })
147     @Retention(RetentionPolicy.SOURCE)
148     public @interface DisplayOptions {}
149 
150     /**
151      * Use logo instead of icon if available. This flag will cause appropriate
152      * navigation modes to use a wider logo in place of the standard icon.
153      *
154      * @see #setDisplayOptions(int)
155      * @see #setDisplayOptions(int, int)
156      */
157     public static final int DISPLAY_USE_LOGO = 0x1;
158 
159     /**
160      * Show 'home' elements in this action bar, leaving more space for other
161      * navigation elements. This includes logo and icon.
162      *
163      * @see #setDisplayOptions(int)
164      * @see #setDisplayOptions(int, int)
165      */
166     public static final int DISPLAY_SHOW_HOME = 0x2;
167 
168     /**
169      * Display the 'home' element such that it appears as an 'up' affordance.
170      * e.g. show an arrow to the left indicating the action that will be taken.
171      *
172      * Set this flag if selecting the 'home' button in the action bar to return
173      * up by a single level in your UI rather than back to the top level or front page.
174      *
175      * <p>Setting this option will implicitly enable interaction with the home/up
176      * button. See {@link #setHomeButtonEnabled(boolean)}.
177      *
178      * @see #setDisplayOptions(int)
179      * @see #setDisplayOptions(int, int)
180      */
181     public static final int DISPLAY_HOME_AS_UP = 0x4;
182 
183     /**
184      * Show the activity title and subtitle, if present.
185      *
186      * @see #setTitle(CharSequence)
187      * @see #setTitle(int)
188      * @see #setSubtitle(CharSequence)
189      * @see #setSubtitle(int)
190      * @see #setDisplayOptions(int)
191      * @see #setDisplayOptions(int, int)
192      */
193     public static final int DISPLAY_SHOW_TITLE = 0x8;
194 
195     /**
196      * Show the custom view if one has been set.
197      *
198      * @see #setCustomView(View)
199      * @see #setDisplayOptions(int)
200      * @see #setDisplayOptions(int, int)
201      */
202     public static final int DISPLAY_SHOW_CUSTOM = 0x10;
203 
204     /**
205      * Set the action bar into custom navigation mode, supplying a view
206      * for custom navigation.
207      *
208      * Custom navigation views appear between the application icon and
209      * any action buttons and may use any space available there. Common
210      * use cases for custom navigation views might include an auto-suggesting
211      * address bar for a browser or other navigation mechanisms that do not
212      * translate well to provided navigation modes.
213      *
214      * @param view Custom navigation view to place in the ActionBar.
215      */
setCustomView(View view)216     public abstract void setCustomView(View view);
217 
218     /**
219      * Set the action bar into custom navigation mode, supplying a view
220      * for custom navigation.
221      *
222      * <p>Custom navigation views appear between the application icon and
223      * any action buttons and may use any space available there. Common
224      * use cases for custom navigation views might include an auto-suggesting
225      * address bar for a browser or other navigation mechanisms that do not
226      * translate well to provided navigation modes.</p>
227      *
228      * <p>The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for
229      * the custom view to be displayed.</p>
230      *
231      * @param view Custom navigation view to place in the ActionBar.
232      * @param layoutParams How this custom view should layout in the bar.
233      *
234      * @see #setDisplayOptions(int, int)
235      */
setCustomView(View view, LayoutParams layoutParams)236     public abstract void setCustomView(View view, LayoutParams layoutParams);
237 
238     /**
239      * Set the action bar into custom navigation mode, supplying a view
240      * for custom navigation.
241      *
242      * <p>Custom navigation views appear between the application icon and
243      * any action buttons and may use any space available there. Common
244      * use cases for custom navigation views might include an auto-suggesting
245      * address bar for a browser or other navigation mechanisms that do not
246      * translate well to provided navigation modes.</p>
247      *
248      * <p>The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for
249      * the custom view to be displayed.</p>
250      *
251      * @param resId Resource ID of a layout to inflate into the ActionBar.
252      *
253      * @see #setDisplayOptions(int, int)
254      */
setCustomView(int resId)255     public abstract void setCustomView(int resId);
256 
257     /**
258      * Set the icon to display in the 'home' section of the action bar.
259      * The action bar will use an icon specified by its style or the
260      * activity icon by default.
261      *
262      * Whether the home section shows an icon or logo is controlled
263      * by the display option {@link #DISPLAY_USE_LOGO}.
264      *
265      * @param resId Resource ID of a drawable to show as an icon.
266      *
267      * @see #setDisplayUseLogoEnabled(boolean)
268      * @see #setDisplayShowHomeEnabled(boolean)
269      */
setIcon(@rawableRes int resId)270     public abstract void setIcon(@DrawableRes int resId);
271 
272     /**
273      * Set the icon to display in the 'home' section of the action bar.
274      * The action bar will use an icon specified by its style or the
275      * activity icon by default.
276      *
277      * Whether the home section shows an icon or logo is controlled
278      * by the display option {@link #DISPLAY_USE_LOGO}.
279      *
280      * @param icon Drawable to show as an icon.
281      *
282      * @see #setDisplayUseLogoEnabled(boolean)
283      * @see #setDisplayShowHomeEnabled(boolean)
284      */
setIcon(Drawable icon)285     public abstract void setIcon(Drawable icon);
286 
287     /**
288      * Set the logo to display in the 'home' section of the action bar.
289      * The action bar will use a logo specified by its style or the
290      * activity logo by default.
291      *
292      * Whether the home section shows an icon or logo is controlled
293      * by the display option {@link #DISPLAY_USE_LOGO}.
294      *
295      * @param resId Resource ID of a drawable to show as a logo.
296      *
297      * @see #setDisplayUseLogoEnabled(boolean)
298      * @see #setDisplayShowHomeEnabled(boolean)
299      */
setLogo(@rawableRes int resId)300     public abstract void setLogo(@DrawableRes int resId);
301 
302     /**
303      * Set the logo to display in the 'home' section of the action bar.
304      * The action bar will use a logo specified by its style or the
305      * activity logo by default.
306      *
307      * Whether the home section shows an icon or logo is controlled
308      * by the display option {@link #DISPLAY_USE_LOGO}.
309      *
310      * @param logo Drawable to show as a logo.
311      *
312      * @see #setDisplayUseLogoEnabled(boolean)
313      * @see #setDisplayShowHomeEnabled(boolean)
314      */
setLogo(Drawable logo)315     public abstract void setLogo(Drawable logo);
316 
317     /**
318      * Set the adapter and navigation callback for list navigation mode.
319      *
320      * The supplied adapter will provide views for the expanded list as well as
321      * the currently selected item. (These may be displayed differently.)
322      *
323      * The supplied OnNavigationListener will alert the application when the user
324      * changes the current list selection.
325      *
326      * @param adapter An adapter that will provide views both to display
327      *                the current navigation selection and populate views
328      *                within the dropdown navigation menu.
329      * @param callback An OnNavigationListener that will receive events when the user
330      *                 selects a navigation item.
331      *
332      * @deprecated Action bar navigation modes are deprecated and not supported by inline
333      * toolbar action bars. Consider using other
334      * <a href="http://developer.android.com/design/patterns/navigation.html">common
335      * navigation patterns</a> instead.
336      */
337     @Deprecated
setListNavigationCallbacks(SpinnerAdapter adapter, OnNavigationListener callback)338     public abstract void setListNavigationCallbacks(SpinnerAdapter adapter,
339             OnNavigationListener callback);
340 
341     /**
342      * Set the selected navigation item in list or tabbed navigation modes.
343      *
344      * @param position Position of the item to select.
345      *
346      * @deprecated Action bar navigation modes are deprecated and not supported by inline
347      * toolbar action bars. Consider using other
348      * <a href="http://developer.android.com/design/patterns/navigation.html">common
349      * navigation patterns</a> instead.
350      */
351     @Deprecated
setSelectedNavigationItem(int position)352     public abstract void setSelectedNavigationItem(int position);
353 
354     /**
355      * Get the position of the selected navigation item in list or tabbed navigation modes.
356      *
357      * @return Position of the selected item.
358      *
359      * @deprecated Action bar navigation modes are deprecated and not supported by inline
360      * toolbar action bars. Consider using other
361      * <a href="http://developer.android.com/design/patterns/navigation.html">common
362      * navigation patterns</a> instead.
363      */
364     @Deprecated
getSelectedNavigationIndex()365     public abstract int getSelectedNavigationIndex();
366 
367     /**
368      * Get the number of navigation items present in the current navigation mode.
369      *
370      * @return Number of navigation items.
371      *
372      * @deprecated Action bar navigation modes are deprecated and not supported by inline
373      * toolbar action bars. Consider using other
374      * <a href="http://developer.android.com/design/patterns/navigation.html">common
375      * navigation patterns</a> instead.
376      */
377     @Deprecated
getNavigationItemCount()378     public abstract int getNavigationItemCount();
379 
380     /**
381      * Set the action bar's title. This will only be displayed if
382      * {@link #DISPLAY_SHOW_TITLE} is set.
383      *
384      * @param title Title to set
385      *
386      * @see #setTitle(int)
387      * @see #setDisplayOptions(int, int)
388      */
setTitle(CharSequence title)389     public abstract void setTitle(CharSequence title);
390 
391     /**
392      * Set the action bar's title. This will only be displayed if
393      * {@link #DISPLAY_SHOW_TITLE} is set.
394      *
395      * @param resId Resource ID of title string to set
396      *
397      * @see #setTitle(CharSequence)
398      * @see #setDisplayOptions(int, int)
399      */
setTitle(@tringRes int resId)400     public abstract void setTitle(@StringRes int resId);
401 
402     /**
403      * Set the action bar's subtitle. This will only be displayed if
404      * {@link #DISPLAY_SHOW_TITLE} is set. Set to null to disable the
405      * subtitle entirely.
406      *
407      * @param subtitle Subtitle to set
408      *
409      * @see #setSubtitle(int)
410      * @see #setDisplayOptions(int, int)
411      */
setSubtitle(CharSequence subtitle)412     public abstract void setSubtitle(CharSequence subtitle);
413 
414     /**
415      * Set the action bar's subtitle. This will only be displayed if
416      * {@link #DISPLAY_SHOW_TITLE} is set.
417      *
418      * @param resId Resource ID of subtitle string to set
419      *
420      * @see #setSubtitle(CharSequence)
421      * @see #setDisplayOptions(int, int)
422      */
setSubtitle(int resId)423     public abstract void setSubtitle(int resId);
424 
425     /**
426      * Set display options. This changes all display option bits at once. To change
427      * a limited subset of display options, see {@link #setDisplayOptions(int, int)}.
428      *
429      * @param options A combination of the bits defined by the DISPLAY_ constants
430      *                defined in ActionBar.
431      */
setDisplayOptions(@isplayOptions int options)432     public abstract void setDisplayOptions(@DisplayOptions int options);
433 
434     /**
435      * Set selected display options. Only the options specified by mask will be changed.
436      * To change all display option bits at once, see {@link #setDisplayOptions(int)}.
437      *
438      * <p>Example: setDisplayOptions(0, DISPLAY_SHOW_HOME) will disable the
439      * {@link #DISPLAY_SHOW_HOME} option.
440      * setDisplayOptions(DISPLAY_SHOW_HOME, DISPLAY_SHOW_HOME | DISPLAY_USE_LOGO)
441      * will enable {@link #DISPLAY_SHOW_HOME} and disable {@link #DISPLAY_USE_LOGO}.
442      *
443      * @param options A combination of the bits defined by the DISPLAY_ constants
444      *                defined in ActionBar.
445      * @param mask A bit mask declaring which display options should be changed.
446      */
setDisplayOptions(@isplayOptions int options, @DisplayOptions int mask)447     public abstract void setDisplayOptions(@DisplayOptions int options, @DisplayOptions int mask);
448 
449     /**
450      * Set whether to display the activity logo rather than the activity icon.
451      * A logo is often a wider, more detailed image.
452      *
453      * <p>To set several display options at once, see the setDisplayOptions methods.
454      *
455      * @param useLogo true to use the activity logo, false to use the activity icon.
456      *
457      * @see #setDisplayOptions(int)
458      * @see #setDisplayOptions(int, int)
459      */
setDisplayUseLogoEnabled(boolean useLogo)460     public abstract void setDisplayUseLogoEnabled(boolean useLogo);
461 
462     /**
463      * Set whether to include the application home affordance in the action bar.
464      * Home is presented as either an activity icon or logo.
465      *
466      * <p>To set several display options at once, see the setDisplayOptions methods.
467      *
468      * @param showHome true to show home, false otherwise.
469      *
470      * @see #setDisplayOptions(int)
471      * @see #setDisplayOptions(int, int)
472      */
setDisplayShowHomeEnabled(boolean showHome)473     public abstract void setDisplayShowHomeEnabled(boolean showHome);
474 
475     /**
476      * Set whether home should be displayed as an "up" affordance.
477      * Set this to true if selecting "home" returns up by a single level in your UI
478      * rather than back to the top level or front page.
479      *
480      * <p>To set several display options at once, see the setDisplayOptions methods.
481      *
482      * @param showHomeAsUp true to show the user that selecting home will return one
483      *                     level up rather than to the top level of the app.
484      *
485      * @see #setDisplayOptions(int)
486      * @see #setDisplayOptions(int, int)
487      */
setDisplayHomeAsUpEnabled(boolean showHomeAsUp)488     public abstract void setDisplayHomeAsUpEnabled(boolean showHomeAsUp);
489 
490     /**
491      * Set whether an activity title/subtitle should be displayed.
492      *
493      * <p>To set several display options at once, see the setDisplayOptions methods.
494      *
495      * @param showTitle true to display a title/subtitle if present.
496      * @see #setDisplayOptions(int)
497      * @see #setDisplayOptions(int, int)
498      */
setDisplayShowTitleEnabled(boolean showTitle)499     public abstract void setDisplayShowTitleEnabled(boolean showTitle);
500 
501     /**
502      * Set whether a custom view should be displayed, if set.
503      *
504      * <p>To set several display options at once, see the setDisplayOptions methods.
505      *
506      * @param showCustom true if the currently set custom view should be displayed, false otherwise.
507      *
508      * @see #setDisplayOptions(int)
509      * @see #setDisplayOptions(int, int)
510      */
setDisplayShowCustomEnabled(boolean showCustom)511     public abstract void setDisplayShowCustomEnabled(boolean showCustom);
512 
513     /**
514      * Set the ActionBar's background. This will be used for the primary
515      * action bar.
516      *
517      * @param d Background drawable
518      * @see #setStackedBackgroundDrawable(Drawable)
519      * @see #setSplitBackgroundDrawable(Drawable)
520      */
setBackgroundDrawable(@ullable Drawable d)521     public abstract void setBackgroundDrawable(@Nullable Drawable d);
522 
523     /**
524      * Set the ActionBar's stacked background. This will appear
525      * in the second row/stacked bar on some devices and configurations.
526      *
527      * @param d Background drawable for the stacked row
528      */
setStackedBackgroundDrawable(Drawable d)529     public void setStackedBackgroundDrawable(Drawable d) { }
530 
531     /**
532      * Set the ActionBar's split background. This will appear in
533      * the split action bar containing menu-provided action buttons
534      * on some devices and configurations.
535      * <p>You can enable split action bar with {@link android.R.attr#uiOptions}
536      *
537      * @param d Background drawable for the split bar
538      */
setSplitBackgroundDrawable(Drawable d)539     public void setSplitBackgroundDrawable(Drawable d) { }
540 
541     /**
542      * @return The current custom view.
543      */
getCustomView()544     public abstract View getCustomView();
545 
546     /**
547      * Returns the current ActionBar title in standard mode.
548      * Returns null if {@link #getNavigationMode()} would not return
549      * {@link #NAVIGATION_MODE_STANDARD}.
550      *
551      * @return The current ActionBar title or null.
552      */
553     @Nullable
getTitle()554     public abstract CharSequence getTitle();
555 
556     /**
557      * Returns the current ActionBar subtitle in standard mode.
558      * Returns null if {@link #getNavigationMode()} would not return
559      * {@link #NAVIGATION_MODE_STANDARD}.
560      *
561      * @return The current ActionBar subtitle or null.
562      */
563     @Nullable
getSubtitle()564     public abstract CharSequence getSubtitle();
565 
566     /**
567      * Returns the current navigation mode. The result will be one of:
568      * <ul>
569      * <li>{@link #NAVIGATION_MODE_STANDARD}</li>
570      * <li>{@link #NAVIGATION_MODE_LIST}</li>
571      * <li>{@link #NAVIGATION_MODE_TABS}</li>
572      * </ul>
573      *
574      * @return The current navigation mode.
575      *
576      * @deprecated Action bar navigation modes are deprecated and not supported by inline
577      * toolbar action bars. Consider using other
578      * <a href="http://developer.android.com/design/patterns/navigation.html">common
579      * navigation patterns</a> instead.
580      */
581     @Deprecated
582     @NavigationMode
getNavigationMode()583     public abstract int getNavigationMode();
584 
585     /**
586      * Set the current navigation mode.
587      *
588      * @param mode The new mode to set.
589      * @see #NAVIGATION_MODE_STANDARD
590      * @see #NAVIGATION_MODE_LIST
591      * @see #NAVIGATION_MODE_TABS
592      *
593      * @deprecated Action bar navigation modes are deprecated and not supported by inline
594      * toolbar action bars. Consider using other
595      * <a href="http://developer.android.com/design/patterns/navigation.html">common
596      * navigation patterns</a> instead.
597      */
598     @Deprecated
setNavigationMode(@avigationMode int mode)599     public abstract void setNavigationMode(@NavigationMode int mode);
600 
601     /**
602      * @return The current set of display options.
603      */
604     @DisplayOptions
getDisplayOptions()605     public abstract int getDisplayOptions();
606 
607     /**
608      * Create and return a new {@link Tab}.
609      * This tab will not be included in the action bar until it is added.
610      *
611      * @return A new Tab
612      *
613      * @see #addTab(Tab)
614      *
615      * @deprecated Action bar navigation modes are deprecated and not supported by inline
616      * toolbar action bars. Consider using other
617      * <a href="http://developer.android.com/design/patterns/navigation.html">common
618      * navigation patterns</a> instead.
619      */
620     @Deprecated
newTab()621     public abstract Tab newTab();
622 
623     /**
624      * Add a tab for use in tabbed navigation mode. The tab will be added at the end of the list.
625      * If this is the first tab to be added it will become the selected tab.
626      *
627      * @param tab Tab to add
628      *
629      * @deprecated Action bar navigation modes are deprecated and not supported by inline
630      * toolbar action bars. Consider using other
631      * <a href="http://developer.android.com/design/patterns/navigation.html">common
632      * navigation patterns</a> instead.
633      */
634     @Deprecated
addTab(Tab tab)635     public abstract void addTab(Tab tab);
636 
637     /**
638      * Add a tab for use in tabbed navigation mode. The tab will be added at the end of the list.
639      *
640      * @param tab Tab to add
641      * @param setSelected True if the added tab should become the selected tab.
642      *
643      * @deprecated Action bar navigation modes are deprecated and not supported by inline
644      * toolbar action bars. Consider using other
645      * <a href="http://developer.android.com/design/patterns/navigation.html">common
646      * navigation patterns</a> instead.
647      */
648     @Deprecated
addTab(Tab tab, boolean setSelected)649     public abstract void addTab(Tab tab, boolean setSelected);
650 
651     /**
652      * Add a tab for use in tabbed navigation mode. The tab will be inserted at
653      * <code>position</code>. If this is the first tab to be added it will become
654      * the selected tab.
655      *
656      * @param tab The tab to add
657      * @param position The new position of the tab
658      *
659      * @deprecated Action bar navigation modes are deprecated and not supported by inline
660      * toolbar action bars. Consider using other
661      * <a href="http://developer.android.com/design/patterns/navigation.html">common
662      * navigation patterns</a> instead.
663      */
664     @Deprecated
addTab(Tab tab, int position)665     public abstract void addTab(Tab tab, int position);
666 
667     /**
668      * Add a tab for use in tabbed navigation mode. The tab will be inserted at
669      * <code>position</code>.
670      *
671      * @param tab The tab to add
672      * @param position The new position of the tab
673      * @param setSelected True if the added tab should become the selected tab.
674      *
675      * @deprecated Action bar navigation modes are deprecated and not supported by inline
676      * toolbar action bars. Consider using other
677      * <a href="http://developer.android.com/design/patterns/navigation.html">common
678      * navigation patterns</a> instead.
679      */
680     @Deprecated
addTab(Tab tab, int position, boolean setSelected)681     public abstract void addTab(Tab tab, int position, boolean setSelected);
682 
683     /**
684      * Remove a tab from the action bar. If the removed tab was selected it will be deselected
685      * and another tab will be selected if present.
686      *
687      * @param tab The tab to remove
688      *
689      * @deprecated Action bar navigation modes are deprecated and not supported by inline
690      * toolbar action bars. Consider using other
691      * <a href="http://developer.android.com/design/patterns/navigation.html">common
692      * navigation patterns</a> instead.
693      */
694     @Deprecated
removeTab(Tab tab)695     public abstract void removeTab(Tab tab);
696 
697     /**
698      * Remove a tab from the action bar. If the removed tab was selected it will be deselected
699      * and another tab will be selected if present.
700      *
701      * @param position Position of the tab to remove
702      *
703      * @deprecated Action bar navigation modes are deprecated and not supported by inline
704      * toolbar action bars. Consider using other
705      * <a href="http://developer.android.com/design/patterns/navigation.html">common
706      * navigation patterns</a> instead.
707      */
708     @Deprecated
removeTabAt(int position)709     public abstract void removeTabAt(int position);
710 
711     /**
712      * Remove all tabs from the action bar and deselect the current tab.
713      *
714      * @deprecated Action bar navigation modes are deprecated and not supported by inline
715      * toolbar action bars. Consider using other
716      * <a href="http://developer.android.com/design/patterns/navigation.html">common
717      * navigation patterns</a> instead.
718      */
719     @Deprecated
removeAllTabs()720     public abstract void removeAllTabs();
721 
722     /**
723      * Select the specified tab. If it is not a child of this action bar it will be added.
724      *
725      * <p>Note: If you want to select by index, use {@link #setSelectedNavigationItem(int)}.</p>
726      *
727      * @param tab Tab to select
728      *
729      * @deprecated Action bar navigation modes are deprecated and not supported by inline
730      * toolbar action bars. Consider using other
731      * <a href="http://developer.android.com/design/patterns/navigation.html">common
732      * navigation patterns</a> instead.
733      */
734     @Deprecated
selectTab(Tab tab)735     public abstract void selectTab(Tab tab);
736 
737     /**
738      * Returns the currently selected tab if in tabbed navigation mode and there is at least
739      * one tab present.
740      *
741      * @return The currently selected tab or null
742      *
743      * @deprecated Action bar navigation modes are deprecated and not supported by inline
744      * toolbar action bars. Consider using other
745      * <a href="http://developer.android.com/design/patterns/navigation.html">common
746      * navigation patterns</a> instead.
747      */
748     @Deprecated
749     @Nullable
getSelectedTab()750     public abstract Tab getSelectedTab();
751 
752     /**
753      * Returns the tab at the specified index.
754      *
755      * @param index Index value in the range 0-get
756      * @return
757      *
758      * @deprecated Action bar navigation modes are deprecated and not supported by inline
759      * toolbar action bars. Consider using other
760      * <a href="http://developer.android.com/design/patterns/navigation.html">common
761      * navigation patterns</a> instead.
762      */
763     @Deprecated
getTabAt(int index)764     public abstract Tab getTabAt(int index);
765 
766     /**
767      * Returns the number of tabs currently registered with the action bar.
768      *
769      * @return Tab count
770      *
771      * @deprecated Action bar navigation modes are deprecated and not supported by inline
772      * toolbar action bars. Consider using other
773      * <a href="http://developer.android.com/design/patterns/navigation.html">common
774      * navigation patterns</a> instead.
775      */
776     @Deprecated
getTabCount()777     public abstract int getTabCount();
778 
779     /**
780      * Retrieve the current height of the ActionBar.
781      *
782      * @return The ActionBar's height
783      */
getHeight()784     public abstract int getHeight();
785 
786     /**
787      * Show the ActionBar if it is not currently showing.
788      * If the window hosting the ActionBar does not have the feature
789      * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
790      * content to fit the new space available.
791      *
792      * <p>If you are hiding the ActionBar through
793      * {@link View#SYSTEM_UI_FLAG_FULLSCREEN View.SYSTEM_UI_FLAG_FULLSCREEN},
794      * you should not call this function directly.
795      */
show()796     public abstract void show();
797 
798     /**
799      * Hide the ActionBar if it is currently showing.
800      * If the window hosting the ActionBar does not have the feature
801      * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
802      * content to fit the new space available.
803      *
804      * <p>Instead of calling this function directly, you can also cause an
805      * ActionBar using the overlay feature to hide through
806      * {@link View#SYSTEM_UI_FLAG_FULLSCREEN View.SYSTEM_UI_FLAG_FULLSCREEN}.
807      * Hiding the ActionBar through this system UI flag allows you to more
808      * seamlessly hide it in conjunction with other screen decorations.
809      */
hide()810     public abstract void hide();
811 
812     /**
813      * @return <code>true</code> if the ActionBar is showing, <code>false</code> otherwise.
814      */
isShowing()815     public abstract boolean isShowing();
816 
817     /**
818      * Add a listener that will respond to menu visibility change events.
819      *
820      * @param listener The new listener to add
821      */
addOnMenuVisibilityListener(OnMenuVisibilityListener listener)822     public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);
823 
824     /**
825      * Remove a menu visibility listener. This listener will no longer receive menu
826      * visibility change events.
827      *
828      * @param listener A listener to remove that was previously added
829      */
removeOnMenuVisibilityListener(OnMenuVisibilityListener listener)830     public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);
831 
832     /**
833      * Enable or disable the "home" button in the corner of the action bar. (Note that this
834      * is the application home/up affordance on the action bar, not the system wide home
835      * button.)
836      *
837      * <p>This defaults to true for packages targeting &lt; API 14. For packages targeting
838      * API 14 or greater, the application should call this method to enable interaction
839      * with the home/up affordance.
840      *
841      * <p>Setting the {@link #DISPLAY_HOME_AS_UP} display option will automatically enable
842      * the home button.
843      *
844      * @param enabled true to enable the home button, false to disable the home button.
845      */
setHomeButtonEnabled(boolean enabled)846     public void setHomeButtonEnabled(boolean enabled) { }
847 
848     /**
849      * Returns a {@link Context} with an appropriate theme for creating views that
850      * will appear in the action bar. If you are inflating or instantiating custom views
851      * that will appear in an action bar, you should use the Context returned by this method.
852      * (This includes adapters used for list navigation mode.)
853      * This will ensure that views contrast properly against the action bar.
854      *
855      * @return A themed Context for creating views
856      */
getThemedContext()857     public Context getThemedContext() {
858         return null;
859     }
860 
861     /**
862      * Returns true if the Title field has been truncated during layout for lack
863      * of available space.
864      *
865      * @return true if the Title field has been truncated
866      * @hide pending API approval
867      */
868     @RestrictTo(GROUP_ID)
isTitleTruncated()869     public boolean isTitleTruncated() { return false; }
870 
871     /**
872      * Set an alternate drawable to display next to the icon/logo/title
873      * when {@link #DISPLAY_HOME_AS_UP} is enabled. This can be useful if you are using
874      * this mode to display an alternate selection for up navigation, such as a sliding drawer.
875      *
876      * <p>If you pass <code>null</code> to this method, the default drawable from the theme
877      * will be used.</p>
878      *
879      * <p>If you implement alternate or intermediate behavior around Up, you should also
880      * call {@link #setHomeActionContentDescription(int) setHomeActionContentDescription()}
881      * to provide a correct description of the action for accessibility support.</p>
882      *
883      * @param indicator A drawable to use for the up indicator, or null to use the theme's default
884      *
885      * @see #setDisplayOptions(int, int)
886      * @see #setDisplayHomeAsUpEnabled(boolean)
887      * @see #setHomeActionContentDescription(int)
888      */
setHomeAsUpIndicator(@ullable Drawable indicator)889     public void setHomeAsUpIndicator(@Nullable Drawable indicator) {}
890 
891     /**
892      * Set an alternate drawable to display next to the icon/logo/title
893      * when {@link #DISPLAY_HOME_AS_UP} is enabled. This can be useful if you are using
894      * this mode to display an alternate selection for up navigation, such as a sliding drawer.
895      *
896      * <p>If you pass <code>0</code> to this method, the default drawable from the theme
897      * will be used.</p>
898      *
899      * <p>If you implement alternate or intermediate behavior around Up, you should also
900      * call {@link #setHomeActionContentDescription(int) setHomeActionContentDescription()}
901      * to provide a correct description of the action for accessibility support.</p>
902      *
903      * @param resId Resource ID of a drawable to use for the up indicator, or 0
904      *              to use the theme's default
905      *
906      * @see #setDisplayOptions(int, int)
907      * @see #setDisplayHomeAsUpEnabled(boolean)
908      * @see #setHomeActionContentDescription(int)
909      */
setHomeAsUpIndicator(@rawableRes int resId)910     public void setHomeAsUpIndicator(@DrawableRes int resId) {}
911 
912     /**
913      * Set an alternate description for the Home/Up action, when enabled.
914      *
915      * <p>This description is commonly used for accessibility/screen readers when
916      * the Home action is enabled. (See {@link #setDisplayHomeAsUpEnabled(boolean)}.)
917      * Examples of this are, "Navigate Home" or "Navigate Up" depending on the
918      * {@link #DISPLAY_HOME_AS_UP} display option. If you have changed the home-as-up
919      * indicator using {@link #setHomeAsUpIndicator(int)} to indicate more specific
920      * functionality such as a sliding drawer, you should also set this to accurately
921      * describe the action.</p>
922      *
923      * <p>Setting this to <code>null</code> will use the system default description.</p>
924      *
925      * @param description New description for the Home action when enabled
926      * @see #setHomeAsUpIndicator(int)
927      * @see #setHomeAsUpIndicator(android.graphics.drawable.Drawable)
928      */
setHomeActionContentDescription(@ullable CharSequence description)929     public void setHomeActionContentDescription(@Nullable CharSequence description) {}
930 
931     /**
932      * Set an alternate description for the Home/Up action, when enabled.
933      *
934      * <p>This description is commonly used for accessibility/screen readers when
935      * the Home action is enabled. (See {@link #setDisplayHomeAsUpEnabled(boolean)}.)
936      * Examples of this are, "Navigate Home" or "Navigate Up" depending on the
937      * {@link #DISPLAY_HOME_AS_UP} display option. If you have changed the home-as-up
938      * indicator using {@link #setHomeAsUpIndicator(int)} to indicate more specific
939      * functionality such as a sliding drawer, you should also set this to accurately
940      * describe the action.</p>
941      *
942      * <p>Setting this to <code>0</code> will use the system default description.</p>
943      *
944      * @param resId Resource ID of a string to use as the new description
945      *              for the Home action when enabled
946      * @see #setHomeAsUpIndicator(int)
947      * @see #setHomeAsUpIndicator(android.graphics.drawable.Drawable)
948      */
setHomeActionContentDescription(@tringRes int resId)949     public void setHomeActionContentDescription(@StringRes int resId) {}
950 
951     /**
952      * Enable hiding the action bar on content scroll.
953      *
954      * <p>If enabled, the action bar will scroll out of sight along with a
955      * {@link View#setNestedScrollingEnabled(boolean) nested scrolling child} view's content.
956      * The action bar must be in {@link Window#FEATURE_ACTION_BAR_OVERLAY overlay mode}
957      * to enable hiding on content scroll.</p>
958      *
959      * <p>When partially scrolled off screen the action bar is considered
960      * {@link #hide() hidden}. A call to {@link #show() show} will cause it to return to full view.
961      * </p>
962      * @param hideOnContentScroll true to enable hiding on content scroll.
963      */
setHideOnContentScrollEnabled(boolean hideOnContentScroll)964     public void setHideOnContentScrollEnabled(boolean hideOnContentScroll) {
965         if (hideOnContentScroll) {
966             throw new UnsupportedOperationException("Hide on content scroll is not supported in " +
967                     "this action bar configuration.");
968         }
969     }
970 
971     /**
972      * Return whether the action bar is configured to scroll out of sight along with
973      * a {@link View#setNestedScrollingEnabled(boolean) nested scrolling child}.
974      *
975      * @return true if hide-on-content-scroll is enabled
976      * @see #setHideOnContentScrollEnabled(boolean)
977      */
isHideOnContentScrollEnabled()978     public boolean isHideOnContentScrollEnabled() {
979         return false;
980     }
981 
982     /**
983      * Return the current vertical offset of the action bar.
984      *
985      * <p>The action bar's current hide offset is the distance that the action bar is currently
986      * scrolled offscreen in pixels. The valid range is 0 (fully visible) to the action bar's
987      * current measured {@link #getHeight() height} (fully invisible).</p>
988      *
989      * @return The action bar's offset toward its fully hidden state in pixels
990      */
getHideOffset()991     public int getHideOffset() {
992         return 0;
993     }
994 
995     /**
996      * Set the current hide offset of the action bar.
997      *
998      * <p>The action bar's current hide offset is the distance that the action bar is currently
999      * scrolled offscreen in pixels. The valid range is 0 (fully visible) to the action bar's
1000      * current measured {@link #getHeight() height} (fully invisible).</p>
1001      *
1002      * @param offset The action bar's offset toward its fully hidden state in pixels.
1003      */
setHideOffset(int offset)1004     public void setHideOffset(int offset) {
1005         if (offset != 0) {
1006             throw new UnsupportedOperationException("Setting an explicit action bar hide offset " +
1007                     "is not supported in this action bar configuration.");
1008         }
1009     }
1010 
1011     /**
1012      * Set the Z-axis elevation of the action bar in pixels.
1013      *
1014      * <p>The action bar's elevation is the distance it is placed from its parent surface. Higher
1015      * values are closer to the user.</p>
1016      *
1017      * @param elevation Elevation value in pixels
1018      */
setElevation(float elevation)1019     public void setElevation(float elevation) {
1020         if (elevation != 0) {
1021             throw new UnsupportedOperationException("Setting a non-zero elevation is " +
1022                     "not supported in this action bar configuration.");
1023         }
1024     }
1025 
1026     /**
1027      * Get the Z-axis elevation of the action bar in pixels.
1028      *
1029      * <p>The action bar's elevation is the distance it is placed from its parent surface. Higher
1030      * values are closer to the user.</p>
1031      *
1032      * @return Elevation value in pixels
1033      */
getElevation()1034     public float getElevation() {
1035         return 0;
1036     }
1037 
1038     /** @hide */
1039     @RestrictTo(GROUP_ID)
setDefaultDisplayHomeAsUpEnabled(boolean enabled)1040     public void setDefaultDisplayHomeAsUpEnabled(boolean enabled) {
1041     }
1042 
1043     /** @hide */
1044     @RestrictTo(GROUP_ID)
setShowHideAnimationEnabled(boolean enabled)1045     public void setShowHideAnimationEnabled(boolean enabled) {
1046     }
1047 
1048     /** @hide */
1049     @RestrictTo(GROUP_ID)
onConfigurationChanged(Configuration config)1050     public void onConfigurationChanged(Configuration config) {
1051     }
1052 
1053     /** @hide */
1054     @RestrictTo(GROUP_ID)
dispatchMenuVisibilityChanged(boolean visible)1055     public void dispatchMenuVisibilityChanged(boolean visible) {
1056     }
1057 
1058     /** @hide */
1059     @RestrictTo(GROUP_ID)
startActionMode(ActionMode.Callback callback)1060     public ActionMode startActionMode(ActionMode.Callback callback) {
1061         return null;
1062     }
1063 
1064     /** @hide */
1065     @RestrictTo(GROUP_ID)
openOptionsMenu()1066     public boolean openOptionsMenu() {
1067         return false;
1068     }
1069 
1070     /** @hide */
1071     @RestrictTo(GROUP_ID)
invalidateOptionsMenu()1072     public boolean invalidateOptionsMenu() {
1073         return false;
1074     }
1075 
1076     /** @hide */
1077     @RestrictTo(GROUP_ID)
onMenuKeyEvent(KeyEvent event)1078     public boolean onMenuKeyEvent(KeyEvent event) {
1079         return false;
1080     }
1081 
1082     /** @hide **/
1083     @RestrictTo(GROUP_ID)
onKeyShortcut(int keyCode, KeyEvent ev)1084     public boolean onKeyShortcut(int keyCode, KeyEvent ev) {
1085         return false;
1086     }
1087 
1088     /** @hide */
1089     @RestrictTo(GROUP_ID)
collapseActionView()1090     public boolean collapseActionView() {
1091         return false;
1092     }
1093 
1094     /** @hide */
1095     @RestrictTo(GROUP_ID)
setWindowTitle(CharSequence title)1096     public void setWindowTitle(CharSequence title) {
1097     }
1098 
1099     /**
1100      * Attempts to move focus to the ActionBar if it does not already contain the focus.
1101      *
1102      * @return {@code true} if focus changes or {@code false} if focus doesn't change.
1103      */
requestFocus()1104     boolean requestFocus() {
1105         return false;
1106     }
1107 
1108     /**
1109      * Clean up any resources
1110      */
onDestroy()1111     void onDestroy() {
1112     }
1113 
1114     /**
1115      * Listener interface for ActionBar navigation events.
1116      *
1117      * @deprecated Action bar navigation modes are deprecated and not supported by inline
1118      * toolbar action bars. Consider using other
1119      * <a href="http://developer.android.com/design/patterns/navigation.html">common
1120      * navigation patterns</a> instead.
1121      */
1122     @Deprecated
1123     public interface OnNavigationListener {
1124         /**
1125          * This method is called whenever a navigation item in your action bar
1126          * is selected.
1127          *
1128          * @param itemPosition Position of the item clicked.
1129          * @param itemId ID of the item clicked.
1130          * @return True if the event was handled, false otherwise.
1131          */
onNavigationItemSelected(int itemPosition, long itemId)1132         public boolean onNavigationItemSelected(int itemPosition, long itemId);
1133     }
1134 
1135     /**
1136      * Listener for receiving events when action bar menus are shown or hidden.
1137      */
1138     public interface OnMenuVisibilityListener {
1139 
1140         /**
1141          * Called when an action bar menu is shown or hidden. Applications may want to use
1142          * this to tune auto-hiding behavior for the action bar or pause/resume video playback,
1143          * gameplay, or other activity within the main content area.
1144          *
1145          * @param isVisible True if an action bar menu is now visible, false if no action bar
1146          *                  menus are visible.
1147          */
onMenuVisibilityChanged(boolean isVisible)1148         public void onMenuVisibilityChanged(boolean isVisible);
1149     }
1150 
1151     /**
1152      * A tab in the action bar.
1153      *
1154      * <p>Tabs manage the hiding and showing of {@link Fragment}s.
1155      *
1156      * @deprecated Action bar navigation modes are deprecated and not supported by inline
1157      * toolbar action bars. Consider using other
1158      * <a href="http://developer.android.com/design/patterns/navigation.html">common
1159      * navigation patterns</a> instead.
1160      */
1161     @Deprecated
1162     public static abstract class Tab {
1163 
1164         /**
1165          * An invalid position for a tab.
1166          *
1167          * @see #getPosition()
1168          */
1169         public static final int INVALID_POSITION = -1;
1170 
1171         /**
1172          * Return the current position of this tab in the action bar.
1173          *
1174          * @return Current position, or {@link #INVALID_POSITION} if this tab is not currently in
1175          *         the action bar.
1176          */
getPosition()1177         public abstract int getPosition();
1178 
1179         /**
1180          * Return the icon associated with this tab.
1181          *
1182          * @return The tab's icon
1183          */
getIcon()1184         public abstract Drawable getIcon();
1185 
1186         /**
1187          * Return the text of this tab.
1188          *
1189          * @return The tab's text
1190          */
getText()1191         public abstract CharSequence getText();
1192 
1193         /**
1194          * Set the icon displayed on this tab.
1195          *
1196          * @param icon The drawable to use as an icon
1197          * @return The current instance for call chaining
1198          */
setIcon(Drawable icon)1199         public abstract Tab setIcon(Drawable icon);
1200 
1201         /**
1202          * Set the icon displayed on this tab.
1203          *
1204          * @param resId Resource ID referring to the drawable to use as an icon
1205          * @return The current instance for call chaining
1206          */
setIcon(@rawableRes int resId)1207         public abstract Tab setIcon(@DrawableRes int resId);
1208 
1209         /**
1210          * Set the text displayed on this tab. Text may be truncated if there is not
1211          * room to display the entire string.
1212          *
1213          * @param text The text to display
1214          * @return The current instance for call chaining
1215          */
setText(CharSequence text)1216         public abstract Tab setText(CharSequence text);
1217 
1218         /**
1219          * Set the text displayed on this tab. Text may be truncated if there is not
1220          * room to display the entire string.
1221          *
1222          * @param resId A resource ID referring to the text that should be displayed
1223          * @return The current instance for call chaining
1224          */
setText(int resId)1225         public abstract Tab setText(int resId);
1226 
1227         /**
1228          * Set a custom view to be used for this tab. This overrides values set by
1229          * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}.
1230          *
1231          * @param view Custom view to be used as a tab.
1232          * @return The current instance for call chaining
1233          */
setCustomView(View view)1234         public abstract Tab setCustomView(View view);
1235 
1236         /**
1237          * Set a custom view to be used for this tab. This overrides values set by
1238          * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}.
1239          *
1240          * @param layoutResId A layout resource to inflate and use as a custom tab view
1241          * @return The current instance for call chaining
1242          */
setCustomView(int layoutResId)1243         public abstract Tab setCustomView(int layoutResId);
1244 
1245         /**
1246          * Retrieve a previously set custom view for this tab.
1247          *
1248          * @return The custom view set by {@link #setCustomView(View)}.
1249          */
getCustomView()1250         public abstract View getCustomView();
1251 
1252         /**
1253          * Give this Tab an arbitrary object to hold for later use.
1254          *
1255          * @param obj Object to store
1256          * @return The current instance for call chaining
1257          */
setTag(Object obj)1258         public abstract Tab setTag(Object obj);
1259 
1260         /**
1261          * @return This Tab's tag object.
1262          */
getTag()1263         public abstract Object getTag();
1264 
1265         /**
1266          * Set the {@link TabListener} that will handle switching to and from this tab.
1267          * All tabs must have a TabListener set before being added to the ActionBar.
1268          *
1269          * @param listener Listener to handle tab selection events
1270          * @return The current instance for call chaining
1271          */
setTabListener(TabListener listener)1272         public abstract Tab setTabListener(TabListener listener);
1273 
1274         /**
1275          * Select this tab. Only valid if the tab has been added to the action bar.
1276          */
select()1277         public abstract void select();
1278 
1279         /**
1280          * Set a description of this tab's content for use in accessibility support.
1281          * If no content description is provided the title will be used.
1282          *
1283          * @param resId A resource ID referring to the description text
1284          * @return The current instance for call chaining
1285          * @see #setContentDescription(CharSequence)
1286          * @see #getContentDescription()
1287          */
setContentDescription(int resId)1288         public abstract Tab setContentDescription(int resId);
1289 
1290         /**
1291          * Set a description of this tab's content for use in accessibility support.
1292          * If no content description is provided the title will be used.
1293          *
1294          * @param contentDesc Description of this tab's content
1295          * @return The current instance for call chaining
1296          * @see #setContentDescription(int)
1297          * @see #getContentDescription()
1298          */
setContentDescription(CharSequence contentDesc)1299         public abstract Tab setContentDescription(CharSequence contentDesc);
1300 
1301         /**
1302          * Gets a brief description of this tab's content for use in accessibility support.
1303          *
1304          * @return Description of this tab's content
1305          * @see #setContentDescription(CharSequence)
1306          * @see #setContentDescription(int)
1307          */
getContentDescription()1308         public abstract CharSequence getContentDescription();
1309     }
1310 
1311     /**
1312      * Callback interface invoked when a tab is focused, unfocused, added, or removed.
1313      *
1314      * @deprecated Action bar navigation modes are deprecated and not supported by inline
1315      * toolbar action bars. Consider using other
1316      * <a href="http://developer.android.com/design/patterns/navigation.html">common
1317      * navigation patterns</a> instead.
1318      */
1319     @Deprecated
1320     public interface TabListener {
1321 
1322         /**
1323          * Called when a tab enters the selected state.
1324          *
1325          * @param tab The tab that was selected
1326          * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
1327          *        during a tab switch. The previous tab's unselect and this tab's select will be
1328          *        executed in a single transaction. This FragmentTransaction does not support
1329          *        being added to the back stack.
1330          */
onTabSelected(Tab tab, FragmentTransaction ft)1331         public void onTabSelected(Tab tab, FragmentTransaction ft);
1332 
1333         /**
1334          * Called when a tab exits the selected state.
1335          *
1336          * @param tab The tab that was unselected
1337          * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
1338          *        during a tab switch. This tab's unselect and the newly selected tab's select
1339          *        will be executed in a single transaction. This FragmentTransaction does not
1340          *        support being added to the back stack.
1341          */
onTabUnselected(Tab tab, FragmentTransaction ft)1342         public void onTabUnselected(Tab tab, FragmentTransaction ft);
1343 
1344         /**
1345          * Called when a tab that is already selected is chosen again by the user.
1346          * Some applications may use this action to return to the top level of a category.
1347          *
1348          * @param tab The tab that was reselected.
1349          * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
1350          *        once this method returns. This FragmentTransaction does not support
1351          *        being added to the back stack.
1352          */
onTabReselected(Tab tab, FragmentTransaction ft)1353         public void onTabReselected(Tab tab, FragmentTransaction ft);
1354     }
1355 
1356     /**
1357      * Per-child layout information associated with action bar custom views.
1358      */
1359     public static class LayoutParams extends ViewGroup.MarginLayoutParams {
1360         /**
1361          * Gravity for the view associated with these LayoutParams.
1362          *
1363          * @see android.view.Gravity
1364          */
1365         public int gravity = Gravity.NO_GRAVITY;
1366 
LayoutParams(@onNull Context c, AttributeSet attrs)1367         public LayoutParams(@NonNull Context c, AttributeSet attrs) {
1368             super(c, attrs);
1369 
1370             TypedArray a = c.obtainStyledAttributes(attrs, R.styleable.ActionBarLayout);
1371             gravity = a.getInt(R.styleable.ActionBarLayout_android_layout_gravity, Gravity.NO_GRAVITY);
1372             a.recycle();
1373         }
1374 
LayoutParams(int width, int height)1375         public LayoutParams(int width, int height) {
1376             super(width, height);
1377             this.gravity = Gravity.CENTER_VERTICAL | GravityCompat.START;
1378         }
1379 
LayoutParams(int width, int height, int gravity)1380         public LayoutParams(int width, int height, int gravity) {
1381             super(width, height);
1382             this.gravity = gravity;
1383         }
1384 
LayoutParams(int gravity)1385         public LayoutParams(int gravity) {
1386             this(WRAP_CONTENT, MATCH_PARENT, gravity);
1387         }
1388 
LayoutParams(LayoutParams source)1389         public LayoutParams(LayoutParams source) {
1390             super(source);
1391 
1392             this.gravity = source.gravity;
1393         }
1394 
LayoutParams(ViewGroup.LayoutParams source)1395         public LayoutParams(ViewGroup.LayoutParams source) {
1396             super(source);
1397         }
1398     }
1399 }
1400