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