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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 452 public void setSplitBackgroundDrawable(Drawable d) { } 453 454 /** 455 * @return The current custom view. 456 */ 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 */ 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 */ 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 */ 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 */ 497 public abstract void setNavigationMode(int mode); 498 499 /** 500 * @return The current set of display options. 501 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 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 */ 570 public abstract void removeTabAt(int position); 571 572 /** 573 * Remove all tabs from the action bar and deselect the current tab. 574 */ 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 */ 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 */ 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 */ 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 */ 606 public abstract int getTabCount(); 607 608 /** 609 * Retrieve the current height of the ActionBar. 610 * 611 * @return The ActionBar's height 612 */ 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 */ 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 */ 639 public abstract void hide(); 640 641 /** 642 * @return <code>true</code> if the ActionBar is showing, <code>false</code> otherwise. 643 */ 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 */ 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 */ 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 */ 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 */ 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 */ 695 public boolean isTitleTruncated() { return false; } 696 697 /** 698 * Set an alternate drawable to display next to the icon/logo/title 699 * when {@link #DISPLAY_HOME_AS_UP} is enabled. This can be useful if you are using 700 * this mode to display an alternate selection for up navigation, such as a sliding drawer. 701 * 702 * <p>If you pass <code>null</code> to this method, the default drawable from the theme 703 * will be used.</p> 704 * 705 * <p>If you implement alternate or intermediate behavior around Up, you should also 706 * call {@link #setHomeActionContentDescription(int) setHomeActionContentDescription()} 707 * to provide a correct description of the action for accessibility support.</p> 708 * 709 * @param indicator A drawable to use for the up indicator, or null to use the theme's default 710 * 711 * @see #setDisplayOptions(int, int) 712 * @see #setDisplayHomeAsUpEnabled(boolean) 713 * @see #setHomeActionContentDescription(int) 714 */ 715 public void setHomeAsUpIndicator(Drawable indicator) { } 716 717 /** 718 * Set an alternate drawable to display next to the icon/logo/title 719 * when {@link #DISPLAY_HOME_AS_UP} is enabled. This can be useful if you are using 720 * this mode to display an alternate selection for up navigation, such as a sliding drawer. 721 * 722 * <p>If you pass <code>0</code> to this method, the default drawable from the theme 723 * will be used.</p> 724 * 725 * <p>If you implement alternate or intermediate behavior around Up, you should also 726 * call {@link #setHomeActionContentDescription(int) setHomeActionContentDescription()} 727 * to provide a correct description of the action for accessibility support.</p> 728 * 729 * @param resId Resource ID of a drawable to use for the up indicator, or null 730 * to use the theme's default 731 * 732 * @see #setDisplayOptions(int, int) 733 * @see #setDisplayHomeAsUpEnabled(boolean) 734 * @see #setHomeActionContentDescription(int) 735 */ 736 public void setHomeAsUpIndicator(int resId) { } 737 738 /** 739 * Set an alternate description for the Home/Up action, when enabled. 740 * 741 * <p>This description is commonly used for accessibility/screen readers when 742 * the Home action is enabled. (See {@link #setDisplayHomeAsUpEnabled(boolean)}.) 743 * Examples of this are, "Navigate Home" or "Navigate Up" depending on the 744 * {@link #DISPLAY_HOME_AS_UP} display option. If you have changed the home-as-up 745 * indicator using {@link #setHomeAsUpIndicator(int)} to indicate more specific 746 * functionality such as a sliding drawer, you should also set this to accurately 747 * describe the action.</p> 748 * 749 * <p>Setting this to <code>null</code> will use the system default description.</p> 750 * 751 * @param description New description for the Home action when enabled 752 * @see #setHomeAsUpIndicator(int) 753 * @see #setHomeAsUpIndicator(android.graphics.drawable.Drawable) 754 */ 755 public void setHomeActionContentDescription(CharSequence description) { } 756 757 /** 758 * Set an alternate description for the Home/Up action, when enabled. 759 * 760 * <p>This description is commonly used for accessibility/screen readers when 761 * the Home action is enabled. (See {@link #setDisplayHomeAsUpEnabled(boolean)}.) 762 * Examples of this are, "Navigate Home" or "Navigate Up" depending on the 763 * {@link #DISPLAY_HOME_AS_UP} display option. If you have changed the home-as-up 764 * indicator using {@link #setHomeAsUpIndicator(int)} to indicate more specific 765 * functionality such as a sliding drawer, you should also set this to accurately 766 * describe the action.</p> 767 * 768 * <p>Setting this to <code>0</code> will use the system default description.</p> 769 * 770 * @param resId Resource ID of a string to use as the new description 771 * for the Home action when enabled 772 * @see #setHomeAsUpIndicator(int) 773 * @see #setHomeAsUpIndicator(android.graphics.drawable.Drawable) 774 */ 775 public void setHomeActionContentDescription(int resId) { } 776 777 /** 778 * Listener interface for ActionBar navigation events. 779 */ 780 public interface OnNavigationListener { 781 /** 782 * This method is called whenever a navigation item in your action bar 783 * is selected. 784 * 785 * @param itemPosition Position of the item clicked. 786 * @param itemId ID of the item clicked. 787 * @return True if the event was handled, false otherwise. 788 */ 789 public boolean onNavigationItemSelected(int itemPosition, long itemId); 790 } 791 792 /** 793 * Listener for receiving events when action bar menus are shown or hidden. 794 */ 795 public interface OnMenuVisibilityListener { 796 /** 797 * Called when an action bar menu is shown or hidden. Applications may want to use 798 * this to tune auto-hiding behavior for the action bar or pause/resume video playback, 799 * gameplay, or other activity within the main content area. 800 * 801 * @param isVisible True if an action bar menu is now visible, false if no action bar 802 * menus are visible. 803 */ 804 public void onMenuVisibilityChanged(boolean isVisible); 805 } 806 807 /** 808 * A tab in the action bar. 809 * 810 * <p>Tabs manage the hiding and showing of {@link Fragment}s. 811 */ 812 public static abstract class Tab { 813 /** 814 * An invalid position for a tab. 815 * 816 * @see #getPosition() 817 */ 818 public static final int INVALID_POSITION = -1; 819 820 /** 821 * Return the current position of this tab in the action bar. 822 * 823 * @return Current position, or {@link #INVALID_POSITION} if this tab is not currently in 824 * the action bar. 825 */ 826 public abstract int getPosition(); 827 828 /** 829 * Return the icon associated with this tab. 830 * 831 * @return The tab's icon 832 */ 833 public abstract Drawable getIcon(); 834 835 /** 836 * Return the text of this tab. 837 * 838 * @return The tab's text 839 */ 840 public abstract CharSequence getText(); 841 842 /** 843 * Set the icon displayed on this tab. 844 * 845 * @param icon The drawable to use as an icon 846 * @return The current instance for call chaining 847 */ 848 public abstract Tab setIcon(Drawable icon); 849 850 /** 851 * Set the icon displayed on this tab. 852 * 853 * @param resId Resource ID referring to the drawable to use as an icon 854 * @return The current instance for call chaining 855 */ 856 public abstract Tab setIcon(int resId); 857 858 /** 859 * Set the text displayed on this tab. Text may be truncated if there is not 860 * room to display the entire string. 861 * 862 * @param text The text to display 863 * @return The current instance for call chaining 864 */ 865 public abstract Tab setText(CharSequence text); 866 867 /** 868 * Set the text displayed on this tab. Text may be truncated if there is not 869 * room to display the entire string. 870 * 871 * @param resId A resource ID referring to the text that should be displayed 872 * @return The current instance for call chaining 873 */ 874 public abstract Tab setText(int resId); 875 876 /** 877 * Set a custom view to be used for this tab. This overrides values set by 878 * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}. 879 * 880 * @param view Custom view to be used as a tab. 881 * @return The current instance for call chaining 882 */ 883 public abstract Tab setCustomView(View view); 884 885 /** 886 * Set a custom view to be used for this tab. This overrides values set by 887 * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}. 888 * 889 * @param layoutResId A layout resource to inflate and use as a custom tab view 890 * @return The current instance for call chaining 891 */ 892 public abstract Tab setCustomView(int layoutResId); 893 894 /** 895 * Retrieve a previously set custom view for this tab. 896 * 897 * @return The custom view set by {@link #setCustomView(View)}. 898 */ 899 public abstract View getCustomView(); 900 901 /** 902 * Give this Tab an arbitrary object to hold for later use. 903 * 904 * @param obj Object to store 905 * @return The current instance for call chaining 906 */ 907 public abstract Tab setTag(Object obj); 908 909 /** 910 * @return This Tab's tag object. 911 */ 912 public abstract Object getTag(); 913 914 /** 915 * Set the {@link TabListener} that will handle switching to and from this tab. 916 * All tabs must have a TabListener set before being added to the ActionBar. 917 * 918 * @param listener Listener to handle tab selection events 919 * @return The current instance for call chaining 920 */ 921 public abstract Tab setTabListener(TabListener listener); 922 923 /** 924 * Select this tab. Only valid if the tab has been added to the action bar. 925 */ 926 public abstract void select(); 927 928 /** 929 * Set a description of this tab's content for use in accessibility support. 930 * If no content description is provided the title will be used. 931 * 932 * @param resId A resource ID referring to the description text 933 * @return The current instance for call chaining 934 * @see #setContentDescription(CharSequence) 935 * @see #getContentDescription() 936 */ 937 public abstract Tab setContentDescription(int resId); 938 939 /** 940 * Set a description of this tab's content for use in accessibility support. 941 * If no content description is provided the title will be used. 942 * 943 * @param contentDesc Description of this tab's content 944 * @return The current instance for call chaining 945 * @see #setContentDescription(int) 946 * @see #getContentDescription() 947 */ 948 public abstract Tab setContentDescription(CharSequence contentDesc); 949 950 /** 951 * Gets a brief description of this tab's content for use in accessibility support. 952 * 953 * @return Description of this tab's content 954 * @see #setContentDescription(CharSequence) 955 * @see #setContentDescription(int) 956 */ 957 public abstract CharSequence getContentDescription(); 958 } 959 960 /** 961 * Callback interface invoked when a tab is focused, unfocused, added, or removed. 962 */ 963 public interface TabListener { 964 /** 965 * Called when a tab enters the selected state. 966 * 967 * @param tab The tab that was selected 968 * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute 969 * during a tab switch. The previous tab's unselect and this tab's select will be 970 * executed in a single transaction. This FragmentTransaction does not support 971 * being added to the back stack. 972 */ 973 public void onTabSelected(Tab tab, FragmentTransaction ft); 974 975 /** 976 * Called when a tab exits the selected state. 977 * 978 * @param tab The tab that was unselected 979 * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute 980 * during a tab switch. This tab's unselect and the newly selected tab's select 981 * will be executed in a single transaction. This FragmentTransaction does not 982 * support being added to the back stack. 983 */ 984 public void onTabUnselected(Tab tab, FragmentTransaction ft); 985 986 /** 987 * Called when a tab that is already selected is chosen again by the user. 988 * Some applications may use this action to return to the top level of a category. 989 * 990 * @param tab The tab that was reselected. 991 * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute 992 * once this method returns. This FragmentTransaction does not support 993 * being added to the back stack. 994 */ 995 public void onTabReselected(Tab tab, FragmentTransaction ft); 996 } 997 998 /** 999 * Per-child layout information associated with action bar custom views. 1000 * 1001 * @attr ref android.R.styleable#ActionBar_LayoutParams_layout_gravity 1002 */ 1003 public static class LayoutParams extends MarginLayoutParams { 1004 /** 1005 * Gravity for the view associated with these LayoutParams. 1006 * 1007 * @see android.view.Gravity 1008 */ 1009 @ViewDebug.ExportedProperty(category = "layout", mapping = { 1010 @ViewDebug.IntToString(from = -1, to = "NONE"), 1011 @ViewDebug.IntToString(from = Gravity.NO_GRAVITY, to = "NONE"), 1012 @ViewDebug.IntToString(from = Gravity.TOP, to = "TOP"), 1013 @ViewDebug.IntToString(from = Gravity.BOTTOM, to = "BOTTOM"), 1014 @ViewDebug.IntToString(from = Gravity.LEFT, to = "LEFT"), 1015 @ViewDebug.IntToString(from = Gravity.RIGHT, to = "RIGHT"), 1016 @ViewDebug.IntToString(from = Gravity.START, to = "START"), 1017 @ViewDebug.IntToString(from = Gravity.END, to = "END"), 1018 @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL, to = "CENTER_VERTICAL"), 1019 @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL, to = "FILL_VERTICAL"), 1020 @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"), 1021 @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL, to = "FILL_HORIZONTAL"), 1022 @ViewDebug.IntToString(from = Gravity.CENTER, to = "CENTER"), 1023 @ViewDebug.IntToString(from = Gravity.FILL, to = "FILL") 1024 }) 1025 public int gravity = Gravity.NO_GRAVITY; 1026 1027 public LayoutParams(Context c, AttributeSet attrs) { 1028 super(c, attrs); 1029 1030 TypedArray a = c.obtainStyledAttributes(attrs, 1031 com.android.internal.R.styleable.ActionBar_LayoutParams); 1032 gravity = a.getInt( 1033 com.android.internal.R.styleable.ActionBar_LayoutParams_layout_gravity, 1034 Gravity.NO_GRAVITY); 1035 a.recycle(); 1036 } 1037 1038 public LayoutParams(int width, int height) { 1039 super(width, height); 1040 this.gravity = Gravity.CENTER_VERTICAL | Gravity.START; 1041 } 1042 1043 public LayoutParams(int width, int height, int gravity) { 1044 super(width, height); 1045 this.gravity = gravity; 1046 } 1047 1048 public LayoutParams(int gravity) { 1049 this(WRAP_CONTENT, MATCH_PARENT, gravity); 1050 } 1051 1052 public LayoutParams(LayoutParams source) { 1053 super(source); 1054 1055 this.gravity = source.gravity; 1056 } 1057 1058 public LayoutParams(ViewGroup.LayoutParams source) { 1059 super(source); 1060 } 1061 } 1062 } 1063