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