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