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