blob: cff16ff615923c4ffd587d80aa04b8fb2421718a [file] [log] [blame]
Adam Powell33b97432010-04-20 10:01:14 -07001/*
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
17package android.app;
18
Adam Powell9ab97872010-10-26 21:47:29 -070019import android.content.Context;
20import android.content.res.TypedArray;
Adam Powell33b97432010-04-20 10:01:14 -070021import android.graphics.drawable.Drawable;
Adam Powell9ab97872010-10-26 21:47:29 -070022import android.util.AttributeSet;
23import android.view.Gravity;
Adam Powell33b97432010-04-20 10:01:14 -070024import android.view.View;
Adam Powell9ab97872010-10-26 21:47:29 -070025import android.view.ViewDebug;
26import android.view.ViewGroup;
27import android.view.ViewGroup.MarginLayoutParams;
Adam Powell6b336f82010-08-10 20:13:01 -070028import android.view.Window;
Adam Powella4082912010-06-04 18:34:02 -070029import android.widget.SpinnerAdapter;
Adam Powell33b97432010-04-20 10:01:14 -070030
31/**
Scott Maine797ed62011-09-22 16:17:45 -070032 * 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>
Scott Main36193d02011-07-12 15:24:01 -070044 * <p>From your activity, you can retrieve an instance of {@link ActionBar} by calling {@link
45 * android.app.Activity#getActionBar getActionBar()}.</p>
Scott Maine797ed62011-09-22 16:17:45 -070046 * <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}.
Joe Fernandezb54e7a32011-10-03 15:09:50 -070052 * <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>
Adam Powell33b97432010-04-20 10:01:14 -070058 */
59public abstract class ActionBar {
Adam Powella1700782010-05-13 13:27:35 -070060 /**
Adam Powella4082912010-06-04 18:34:02 -070061 * Standard navigation mode. Consists of either a logo or icon
Adam Powella1700782010-05-13 13:27:35 -070062 * and title text with an optional subtitle. Clicking any of these elements
Adam Powellcf035762010-12-06 11:49:45 -080063 * will dispatch onOptionsItemSelected to the host Activity with
Adam Powella1700782010-05-13 13:27:35 -070064 * a MenuItem with item ID android.R.id.home.
65 */
Adam Powella4082912010-06-04 18:34:02 -070066 public static final int NAVIGATION_MODE_STANDARD = 0;
Adam Powell33b97432010-04-20 10:01:14 -070067
68 /**
Adam Powell9ab97872010-10-26 21:47:29 -070069 * 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.
Adam Powell33b97432010-04-20 10:01:14 -070072 */
Adam Powell9ab97872010-10-26 21:47:29 -070073 public static final int NAVIGATION_MODE_LIST = 1;
Adam Powell33b97432010-04-20 10:01:14 -070074
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;
Adam Powell33b97432010-04-20 10:01:14 -070080
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.
Adam Powell9ab97872010-10-26 21:47:29 -070084 *
85 * @see #setDisplayOptions(int)
86 * @see #setDisplayOptions(int, int)
Adam Powell33b97432010-04-20 10:01:14 -070087 */
88 public static final int DISPLAY_USE_LOGO = 0x1;
89
90 /**
Adam Powell9ab97872010-10-26 21:47:29 -070091 * Show 'home' elements in this action bar, leaving more space for other
Adam Powell33b97432010-04-20 10:01:14 -070092 * navigation elements. This includes logo and icon.
Adam Powell9ab97872010-10-26 21:47:29 -070093 *
94 * @see #setDisplayOptions(int)
95 * @see #setDisplayOptions(int, int)
Adam Powell33b97432010-04-20 10:01:14 -070096 */
Adam Powell9ab97872010-10-26 21:47:29 -070097 public static final int DISPLAY_SHOW_HOME = 0x2;
98
99 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700100 * 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 *
Adam Powellc29f4e52011-07-13 20:40:52 -0700106 * <p>Setting this option will implicitly enable interaction with the home/up
107 * button. See {@link #setHomeButtonEnabled(boolean)}.
108 *
Adam Powell9ab97872010-10-26 21:47:29 -0700109 * @see #setDisplayOptions(int)
110 * @see #setDisplayOptions(int, int)
111 */
112 public static final int DISPLAY_HOME_AS_UP = 0x4;
113
114 /**
115 * Show the activity title and subtitle, if present.
116 *
117 * @see #setTitle(CharSequence)
118 * @see #setTitle(int)
119 * @see #setSubtitle(CharSequence)
120 * @see #setSubtitle(int)
121 * @see #setDisplayOptions(int)
122 * @see #setDisplayOptions(int, int)
123 */
124 public static final int DISPLAY_SHOW_TITLE = 0x8;
125
126 /**
127 * Show the custom view if one has been set.
128 * @see #setCustomView(View)
129 * @see #setDisplayOptions(int)
130 * @see #setDisplayOptions(int, int)
131 */
132 public static final int DISPLAY_SHOW_CUSTOM = 0x10;
133
134 /**
135 * Set the action bar into custom navigation mode, supplying a view
136 * for custom navigation.
137 *
138 * Custom navigation views appear between the application icon and
139 * any action buttons and may use any space available there. Common
140 * use cases for custom navigation views might include an auto-suggesting
141 * address bar for a browser or other navigation mechanisms that do not
142 * translate well to provided navigation modes.
143 *
144 * @param view Custom navigation view to place in the ActionBar.
145 */
146 public abstract void setCustomView(View view);
Adam Powell89e06452010-06-23 20:24:52 -0700147
Adam Powell33b97432010-04-20 10:01:14 -0700148 /**
Adam Powella4082912010-06-04 18:34:02 -0700149 * Set the action bar into custom navigation mode, supplying a view
150 * for custom navigation.
Adam Powell33b97432010-04-20 10:01:14 -0700151 *
Adam Powellef704442010-11-16 14:48:22 -0800152 * <p>Custom navigation views appear between the application icon and
Adam Powell33b97432010-04-20 10:01:14 -0700153 * any action buttons and may use any space available there. Common
Adam Powella4082912010-06-04 18:34:02 -0700154 * use cases for custom navigation views might include an auto-suggesting
155 * address bar for a browser or other navigation mechanisms that do not
Adam Powellef704442010-11-16 14:48:22 -0800156 * translate well to provided navigation modes.</p>
157 *
158 * <p>The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for
159 * the custom view to be displayed.</p>
Adam Powell33b97432010-04-20 10:01:14 -0700160 *
161 * @param view Custom navigation view to place in the ActionBar.
Adam Powell9ab97872010-10-26 21:47:29 -0700162 * @param layoutParams How this custom view should layout in the bar.
Adam Powellef704442010-11-16 14:48:22 -0800163 *
164 * @see #setDisplayOptions(int, int)
Adam Powell33b97432010-04-20 10:01:14 -0700165 */
Adam Powell9ab97872010-10-26 21:47:29 -0700166 public abstract void setCustomView(View view, LayoutParams layoutParams);
167
168 /**
Adam Powell3f476b32011-01-03 19:25:36 -0800169 * Set the action bar into custom navigation mode, supplying a view
170 * for custom navigation.
171 *
172 * <p>Custom navigation views appear between the application icon and
173 * any action buttons and may use any space available there. Common
174 * use cases for custom navigation views might include an auto-suggesting
175 * address bar for a browser or other navigation mechanisms that do not
176 * translate well to provided navigation modes.</p>
177 *
178 * <p>The display option {@link #DISPLAY_SHOW_CUSTOM} must be set for
179 * the custom view to be displayed.</p>
180 *
181 * @param resId Resource ID of a layout to inflate into the ActionBar.
182 *
183 * @see #setDisplayOptions(int, int)
184 */
185 public abstract void setCustomView(int resId);
186
187 /**
Adam Powell1969b872011-03-22 11:52:48 -0700188 * Set the icon to display in the 'home' section of the action bar.
189 * The action bar will use an icon specified by its style or the
190 * activity icon by default.
191 *
192 * Whether the home section shows an icon or logo is controlled
193 * by the display option {@link #DISPLAY_USE_LOGO}.
194 *
195 * @param resId Resource ID of a drawable to show as an icon.
196 *
197 * @see #setDisplayUseLogoEnabled(boolean)
198 * @see #setDisplayShowHomeEnabled(boolean)
199 */
200 public abstract void setIcon(int resId);
201
202 /**
203 * Set the icon to display in the 'home' section of the action bar.
204 * The action bar will use an icon specified by its style or the
205 * activity icon by default.
206 *
207 * Whether the home section shows an icon or logo is controlled
208 * by the display option {@link #DISPLAY_USE_LOGO}.
209 *
210 * @param icon Drawable to show as an icon.
211 *
212 * @see #setDisplayUseLogoEnabled(boolean)
213 * @see #setDisplayShowHomeEnabled(boolean)
214 */
215 public abstract void setIcon(Drawable icon);
216
217 /**
218 * Set the logo to display in the 'home' section of the action bar.
219 * The action bar will use a logo specified by its style or the
220 * activity logo by default.
221 *
222 * Whether the home section shows an icon or logo is controlled
223 * by the display option {@link #DISPLAY_USE_LOGO}.
224 *
225 * @param resId Resource ID of a drawable to show as a logo.
226 *
227 * @see #setDisplayUseLogoEnabled(boolean)
228 * @see #setDisplayShowHomeEnabled(boolean)
229 */
230 public abstract void setLogo(int resId);
231
232 /**
233 * Set the logo to display in the 'home' section of the action bar.
234 * The action bar will use a logo specified by its style or the
235 * activity logo by default.
236 *
237 * Whether the home section shows an icon or logo is controlled
238 * by the display option {@link #DISPLAY_USE_LOGO}.
239 *
240 * @param logo Drawable to show as a logo.
241 *
242 * @see #setDisplayUseLogoEnabled(boolean)
243 * @see #setDisplayShowHomeEnabled(boolean)
244 */
245 public abstract void setLogo(Drawable logo);
246
247 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700248 * Set the adapter and navigation callback for list navigation mode.
249 *
250 * The supplied adapter will provide views for the expanded list as well as
251 * the currently selected item. (These may be displayed differently.)
252 *
Adam Powell8515ee82010-11-30 14:09:55 -0800253 * The supplied OnNavigationListener will alert the application when the user
Adam Powell9ab97872010-10-26 21:47:29 -0700254 * changes the current list selection.
255 *
256 * @param adapter An adapter that will provide views both to display
257 * the current navigation selection and populate views
258 * within the dropdown navigation menu.
Adam Powell8515ee82010-11-30 14:09:55 -0800259 * @param callback An OnNavigationListener that will receive events when the user
Adam Powell9ab97872010-10-26 21:47:29 -0700260 * selects a navigation item.
261 */
262 public abstract void setListNavigationCallbacks(SpinnerAdapter adapter,
Adam Powell8515ee82010-11-30 14:09:55 -0800263 OnNavigationListener callback);
Adam Powell9ab97872010-10-26 21:47:29 -0700264
265 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700266 * Set the selected navigation item in list or tabbed navigation modes.
Adam Powell17809772010-07-21 13:25:11 -0700267 *
268 * @param position Position of the item to select.
269 */
270 public abstract void setSelectedNavigationItem(int position);
271
272 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700273 * Get the position of the selected navigation item in list or tabbed navigation modes.
274 *
275 * @return Position of the selected item.
Adam Powell17809772010-07-21 13:25:11 -0700276 */
Adam Powell9ab97872010-10-26 21:47:29 -0700277 public abstract int getSelectedNavigationIndex();
278
279 /**
280 * Get the number of navigation items present in the current navigation mode.
281 *
282 * @return Number of navigation items.
283 */
284 public abstract int getNavigationItemCount();
Adam Powell17809772010-07-21 13:25:11 -0700285
286 /**
Adam Powellef704442010-11-16 14:48:22 -0800287 * Set the action bar's title. This will only be displayed if
288 * {@link #DISPLAY_SHOW_TITLE} is set.
Adam Powell0e94b512010-06-29 17:58:20 -0700289 *
290 * @param title Title to set
Adam Powella66c7b02010-07-28 15:28:25 -0700291 *
292 * @see #setTitle(int)
Adam Powellef704442010-11-16 14:48:22 -0800293 * @see #setDisplayOptions(int, int)
Adam Powell0e94b512010-06-29 17:58:20 -0700294 */
295 public abstract void setTitle(CharSequence title);
296
297 /**
Adam Powellef704442010-11-16 14:48:22 -0800298 * Set the action bar's title. This will only be displayed if
299 * {@link #DISPLAY_SHOW_TITLE} is set.
Adam Powella66c7b02010-07-28 15:28:25 -0700300 *
301 * @param resId Resource ID of title string to set
302 *
303 * @see #setTitle(CharSequence)
Adam Powellef704442010-11-16 14:48:22 -0800304 * @see #setDisplayOptions(int, int)
Adam Powella66c7b02010-07-28 15:28:25 -0700305 */
306 public abstract void setTitle(int resId);
307
308 /**
Adam Powellef704442010-11-16 14:48:22 -0800309 * Set the action bar's subtitle. This will only be displayed if
310 * {@link #DISPLAY_SHOW_TITLE} is set. Set to null to disable the
311 * subtitle entirely.
Adam Powell0e94b512010-06-29 17:58:20 -0700312 *
313 * @param subtitle Subtitle to set
Adam Powella66c7b02010-07-28 15:28:25 -0700314 *
315 * @see #setSubtitle(int)
Adam Powellef704442010-11-16 14:48:22 -0800316 * @see #setDisplayOptions(int, int)
Adam Powell0e94b512010-06-29 17:58:20 -0700317 */
318 public abstract void setSubtitle(CharSequence subtitle);
319
320 /**
Adam Powellef704442010-11-16 14:48:22 -0800321 * Set the action bar's subtitle. This will only be displayed if
322 * {@link #DISPLAY_SHOW_TITLE} is set.
Adam Powella66c7b02010-07-28 15:28:25 -0700323 *
324 * @param resId Resource ID of subtitle string to set
325 *
326 * @see #setSubtitle(CharSequence)
Adam Powellef704442010-11-16 14:48:22 -0800327 * @see #setDisplayOptions(int, int)
Adam Powella66c7b02010-07-28 15:28:25 -0700328 */
329 public abstract void setSubtitle(int resId);
330
331 /**
Adam Powella1700782010-05-13 13:27:35 -0700332 * Set display options. This changes all display option bits at once. To change
333 * a limited subset of display options, see {@link #setDisplayOptions(int, int)}.
Adam Powell33b97432010-04-20 10:01:14 -0700334 *
335 * @param options A combination of the bits defined by the DISPLAY_ constants
336 * defined in ActionBar.
337 */
338 public abstract void setDisplayOptions(int options);
339
340 /**
Adam Powella1700782010-05-13 13:27:35 -0700341 * Set selected display options. Only the options specified by mask will be changed.
342 * To change all display option bits at once, see {@link #setDisplayOptions(int)}.
343 *
Adam Powell9ab97872010-10-26 21:47:29 -0700344 * <p>Example: setDisplayOptions(0, DISPLAY_SHOW_HOME) will disable the
345 * {@link #DISPLAY_SHOW_HOME} option.
Ben Komalo5ad7af62010-11-01 12:04:51 -0700346 * setDisplayOptions(DISPLAY_SHOW_HOME, DISPLAY_SHOW_HOME | DISPLAY_USE_LOGO)
Adam Powell9ab97872010-10-26 21:47:29 -0700347 * will enable {@link #DISPLAY_SHOW_HOME} and disable {@link #DISPLAY_USE_LOGO}.
Adam Powella1700782010-05-13 13:27:35 -0700348 *
349 * @param options A combination of the bits defined by the DISPLAY_ constants
350 * defined in ActionBar.
351 * @param mask A bit mask declaring which display options should be changed.
352 */
353 public abstract void setDisplayOptions(int options, int mask);
Adam Powell3f476b32011-01-03 19:25:36 -0800354
355 /**
356 * Set whether to display the activity logo rather than the activity icon.
357 * A logo is often a wider, more detailed image.
358 *
359 * <p>To set several display options at once, see the setDisplayOptions methods.
360 *
361 * @param useLogo true to use the activity logo, false to use the activity icon.
362 *
363 * @see #setDisplayOptions(int)
364 * @see #setDisplayOptions(int, int)
365 */
366 public abstract void setDisplayUseLogoEnabled(boolean useLogo);
367
368 /**
369 * Set whether to include the application home affordance in the action bar.
370 * Home is presented as either an activity icon or logo.
371 *
372 * <p>To set several display options at once, see the setDisplayOptions methods.
373 *
374 * @param showHome true to show home, false otherwise.
375 *
376 * @see #setDisplayOptions(int)
377 * @see #setDisplayOptions(int, int)
378 */
379 public abstract void setDisplayShowHomeEnabled(boolean showHome);
380
381 /**
382 * Set whether home should be displayed as an "up" affordance.
383 * Set this to true if selecting "home" returns up by a single level in your UI
384 * rather than back to the top level or front page.
385 *
386 * <p>To set several display options at once, see the setDisplayOptions methods.
387 *
388 * @param showHomeAsUp true to show the user that selecting home will return one
389 * level up rather than to the top level of the app.
390 *
391 * @see #setDisplayOptions(int)
392 * @see #setDisplayOptions(int, int)
393 */
394 public abstract void setDisplayHomeAsUpEnabled(boolean showHomeAsUp);
395
396 /**
397 * Set whether an activity title/subtitle should be displayed.
398 *
399 * <p>To set several display options at once, see the setDisplayOptions methods.
400 *
401 * @param showTitle true to display a title/subtitle if present.
402 *
403 * @see #setDisplayOptions(int)
404 * @see #setDisplayOptions(int, int)
405 */
406 public abstract void setDisplayShowTitleEnabled(boolean showTitle);
407
408 /**
409 * Set whether a custom view should be displayed, if set.
410 *
411 * <p>To set several display options at once, see the setDisplayOptions methods.
412 *
413 * @param showCustom true if the currently set custom view should be displayed, false otherwise.
414 *
415 * @see #setDisplayOptions(int)
416 * @see #setDisplayOptions(int, int)
417 */
418 public abstract void setDisplayShowCustomEnabled(boolean showCustom);
419
Adam Powella1700782010-05-13 13:27:35 -0700420 /**
Adam Powellf88b9152011-09-07 14:54:32 -0700421 * Set the ActionBar's background. This will be used for the primary
422 * action bar.
Adam Powell33b97432010-04-20 10:01:14 -0700423 *
424 * @param d Background drawable
Adam Powellf88b9152011-09-07 14:54:32 -0700425 * @see #setStackedBackgroundDrawable(Drawable)
426 * @see #setSplitBackgroundDrawable(Drawable)
Adam Powell33b97432010-04-20 10:01:14 -0700427 */
428 public abstract void setBackgroundDrawable(Drawable d);
Adam Powellef704442010-11-16 14:48:22 -0800429
430 /**
Adam Powellf88b9152011-09-07 14:54:32 -0700431 * Set the ActionBar's stacked background. This will appear
432 * in the second row/stacked bar on some devices and configurations.
433 *
434 * @param d Background drawable for the stacked row
435 */
Adam Powell01453222011-09-07 16:13:36 -0700436 public void setStackedBackgroundDrawable(Drawable d) { }
Adam Powellf88b9152011-09-07 14:54:32 -0700437
438 /**
439 * Set the ActionBar's split background. This will appear in
440 * the split action bar containing menu-provided action buttons
441 * on some devices and configurations.
Scott Maine797ed62011-09-22 16:17:45 -0700442 * <p>You can enable split action bar with {@link android.R.attr#uiOptions}
Adam Powellf88b9152011-09-07 14:54:32 -0700443 *
444 * @param d Background drawable for the split bar
445 */
Adam Powell01453222011-09-07 16:13:36 -0700446 public void setSplitBackgroundDrawable(Drawable d) { }
Adam Powellf88b9152011-09-07 14:54:32 -0700447
448 /**
Adam Powellef704442010-11-16 14:48:22 -0800449 * @return The current custom view.
450 */
451 public abstract View getCustomView();
452
Adam Powell33b97432010-04-20 10:01:14 -0700453 /**
Adam Powella4082912010-06-04 18:34:02 -0700454 * Returns the current ActionBar title in standard mode.
455 * Returns null if {@link #getNavigationMode()} would not return
456 * {@link #NAVIGATION_MODE_STANDARD}.
457 *
458 * @return The current ActionBar title or null.
Adam Powell33b97432010-04-20 10:01:14 -0700459 */
460 public abstract CharSequence getTitle();
461
462 /**
Adam Powella4082912010-06-04 18:34:02 -0700463 * Returns the current ActionBar subtitle in standard mode.
464 * Returns null if {@link #getNavigationMode()} would not return
465 * {@link #NAVIGATION_MODE_STANDARD}.
466 *
467 * @return The current ActionBar subtitle or null.
Adam Powell33b97432010-04-20 10:01:14 -0700468 */
469 public abstract CharSequence getSubtitle();
470
471 /**
Adam Powella4082912010-06-04 18:34:02 -0700472 * Returns the current navigation mode. The result will be one of:
473 * <ul>
474 * <li>{@link #NAVIGATION_MODE_STANDARD}</li>
Adam Powell9ab97872010-10-26 21:47:29 -0700475 * <li>{@link #NAVIGATION_MODE_LIST}</li>
Adam Powella4082912010-06-04 18:34:02 -0700476 * <li>{@link #NAVIGATION_MODE_TABS}</li>
Adam Powella4082912010-06-04 18:34:02 -0700477 * </ul>
478 *
Adam Powell33b97432010-04-20 10:01:14 -0700479 * @return The current navigation mode.
480 */
481 public abstract int getNavigationMode();
Adam Powell9ab97872010-10-26 21:47:29 -0700482
483 /**
484 * Set the current navigation mode.
485 *
486 * @param mode The new mode to set.
487 * @see #NAVIGATION_MODE_STANDARD
488 * @see #NAVIGATION_MODE_LIST
489 * @see #NAVIGATION_MODE_TABS
490 */
491 public abstract void setNavigationMode(int mode);
492
Adam Powell33b97432010-04-20 10:01:14 -0700493 /**
494 * @return The current set of display options.
495 */
496 public abstract int getDisplayOptions();
Adam Powell661c9082010-07-02 10:09:44 -0700497
498 /**
Adam Powell661c9082010-07-02 10:09:44 -0700499 * Create and return a new {@link Tab}.
500 * This tab will not be included in the action bar until it is added.
501 *
Dianne Hackborn2f048832011-06-16 13:31:57 -0700502 * <p>Very often tabs will be used to switch between {@link Fragment}
503 * objects. Here is a typical implementation of such tabs:</p>
504 *
505 * {@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.java
506 * complete}
507 *
Adam Powell661c9082010-07-02 10:09:44 -0700508 * @return A new Tab
509 *
510 * @see #addTab(Tab)
Adam Powell661c9082010-07-02 10:09:44 -0700511 */
512 public abstract Tab newTab();
513
514 /**
515 * Add a tab for use in tabbed navigation mode. The tab will be added at the end of the list.
Adam Powell81b89442010-11-02 17:58:56 -0700516 * If this is the first tab to be added it will become the selected tab.
Adam Powell661c9082010-07-02 10:09:44 -0700517 *
518 * @param tab Tab to add
519 */
520 public abstract void addTab(Tab tab);
521
522 /**
Adam Powell81b89442010-11-02 17:58:56 -0700523 * Add a tab for use in tabbed navigation mode. The tab will be added at the end of the list.
524 *
525 * @param tab Tab to add
526 * @param setSelected True if the added tab should become the selected tab.
527 */
528 public abstract void addTab(Tab tab, boolean setSelected);
529
530 /**
Adam Powell2b6230e2010-09-07 17:55:25 -0700531 * Add a tab for use in tabbed navigation mode. The tab will be inserted at
Adam Powell81b89442010-11-02 17:58:56 -0700532 * <code>position</code>. If this is the first tab to be added it will become
533 * the selected tab.
Adam Powell661c9082010-07-02 10:09:44 -0700534 *
535 * @param tab The tab to add
536 * @param position The new position of the tab
537 */
Adam Powell2b6230e2010-09-07 17:55:25 -0700538 public abstract void addTab(Tab tab, int position);
Adam Powell661c9082010-07-02 10:09:44 -0700539
540 /**
Adam Powell81b89442010-11-02 17:58:56 -0700541 * Add a tab for use in tabbed navigation mode. The tab will be insterted at
542 * <code>position</code>.
543 *
544 * @param tab The tab to add
545 * @param position The new position of the tab
546 * @param setSelected True if the added tab should become the selected tab.
547 */
548 public abstract void addTab(Tab tab, int position, boolean setSelected);
549
550 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700551 * Remove a tab from the action bar. If the removed tab was selected it will be deselected
552 * and another tab will be selected if present.
Adam Powell661c9082010-07-02 10:09:44 -0700553 *
554 * @param tab The tab to remove
555 */
556 public abstract void removeTab(Tab tab);
557
558 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700559 * Remove a tab from the action bar. If the removed tab was selected it will be deselected
560 * and another tab will be selected if present.
Adam Powell661c9082010-07-02 10:09:44 -0700561 *
562 * @param position Position of the tab to remove
563 */
564 public abstract void removeTabAt(int position);
565
566 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700567 * Remove all tabs from the action bar and deselect the current tab.
568 */
569 public abstract void removeAllTabs();
570
571 /**
Adam Powell661c9082010-07-02 10:09:44 -0700572 * Select the specified tab. If it is not a child of this action bar it will be added.
573 *
Adam Powell9ab97872010-10-26 21:47:29 -0700574 * <p>Note: If you want to select by index, use {@link #setSelectedNavigationItem(int)}.</p>
575 *
Adam Powell661c9082010-07-02 10:09:44 -0700576 * @param tab Tab to select
577 */
578 public abstract void selectTab(Tab tab);
579
580 /**
Adam Powell2b6230e2010-09-07 17:55:25 -0700581 * Returns the currently selected tab if in tabbed navigation mode and there is at least
582 * one tab present.
583 *
584 * @return The currently selected tab or null
585 */
586 public abstract Tab getSelectedTab();
587
588 /**
Adam Powell9ab97872010-10-26 21:47:29 -0700589 * Returns the tab at the specified index.
590 *
591 * @param index Index value in the range 0-get
592 * @return
593 */
594 public abstract Tab getTabAt(int index);
595
596 /**
Adam Powell0c24a552010-11-03 16:44:11 -0700597 * Returns the number of tabs currently registered with the action bar.
598 * @return Tab count
599 */
600 public abstract int getTabCount();
601
602 /**
Adam Powell6b336f82010-08-10 20:13:01 -0700603 * Retrieve the current height of the ActionBar.
604 *
605 * @return The ActionBar's height
606 */
607 public abstract int getHeight();
608
609 /**
610 * Show the ActionBar if it is not currently showing.
611 * If the window hosting the ActionBar does not have the feature
612 * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
613 * content to fit the new space available.
Dianne Hackborn3a3a6cf2012-03-26 10:24:04 -0700614 *
615 * <p>If you are hiding the ActionBar through
616 * {@link View#SYSTEM_UI_FLAG_FULLSCREEN View.SYSTEM_UI_FLAG_FULLSCREEN},
617 * you should not call this function directly.
Adam Powell6b336f82010-08-10 20:13:01 -0700618 */
619 public abstract void show();
620
621 /**
Scott Maine797ed62011-09-22 16:17:45 -0700622 * Hide the ActionBar if it is currently showing.
Adam Powell6b336f82010-08-10 20:13:01 -0700623 * If the window hosting the ActionBar does not have the feature
624 * {@link Window#FEATURE_ACTION_BAR_OVERLAY} it will resize application
625 * content to fit the new space available.
Dianne Hackborn3a3a6cf2012-03-26 10:24:04 -0700626 *
627 * <p>Instead of calling this function directly, you can also cause an
628 * ActionBar using the overlay feature to hide through
629 * {@link View#SYSTEM_UI_FLAG_FULLSCREEN View.SYSTEM_UI_FLAG_FULLSCREEN}.
630 * Hiding the ActionBar through this system UI flag allows you to more
631 * seamlessly hide it in conjunction with other screen decorations.
Adam Powell6b336f82010-08-10 20:13:01 -0700632 */
633 public abstract void hide();
634
635 /**
636 * @return <code>true</code> if the ActionBar is showing, <code>false</code> otherwise.
637 */
638 public abstract boolean isShowing();
639
640 /**
Adam Powell8515ee82010-11-30 14:09:55 -0800641 * Add a listener that will respond to menu visibility change events.
642 *
643 * @param listener The new listener to add
Adam Powell89e06452010-06-23 20:24:52 -0700644 */
Adam Powell8515ee82010-11-30 14:09:55 -0800645 public abstract void addOnMenuVisibilityListener(OnMenuVisibilityListener listener);
646
647 /**
648 * Remove a menu visibility listener. This listener will no longer receive menu
649 * visibility change events.
650 *
651 * @param listener A listener to remove that was previously added
652 */
653 public abstract void removeOnMenuVisibilityListener(OnMenuVisibilityListener listener);
654
655 /**
Adam Powellc29f4e52011-07-13 20:40:52 -0700656 * Enable or disable the "home" button in the corner of the action bar. (Note that this
657 * is the application home/up affordance on the action bar, not the systemwide home
658 * button.)
659 *
660 * <p>This defaults to true for packages targeting &lt; API 14. For packages targeting
661 * API 14 or greater, the application should call this method to enable interaction
662 * with the home/up affordance.
663 *
664 * <p>Setting the {@link #DISPLAY_HOME_AS_UP} display option will automatically enable
665 * the home button.
666 *
667 * @param enabled true to enable the home button, false to disable the home button.
668 */
Adam Powell88ab6972011-07-28 11:25:01 -0700669 public void setHomeButtonEnabled(boolean enabled) { }
670
671 /**
672 * Returns a {@link Context} with an appropriate theme for creating views that
673 * will appear in the action bar. If you are inflating or instantiating custom views
674 * that will appear in an action bar, you should use the Context returned by this method.
675 * (This includes adapters used for list navigation mode.)
676 * This will ensure that views contrast properly against the action bar.
677 *
678 * @return A themed Context for creating views
679 */
680 public Context getThemedContext() { return null; }
Adam Powellc29f4e52011-07-13 20:40:52 -0700681
682 /**
Adam Powell8515ee82010-11-30 14:09:55 -0800683 * Listener interface for ActionBar navigation events.
684 */
685 public interface OnNavigationListener {
Adam Powell33b97432010-04-20 10:01:14 -0700686 /**
Adam Powella4082912010-06-04 18:34:02 -0700687 * This method is called whenever a navigation item in your action bar
688 * is selected.
689 *
690 * @param itemPosition Position of the item clicked.
691 * @param itemId ID of the item clicked.
692 * @return True if the event was handled, false otherwise.
693 */
694 public boolean onNavigationItemSelected(int itemPosition, long itemId);
Adam Powell33b97432010-04-20 10:01:14 -0700695 }
Adam Powell661c9082010-07-02 10:09:44 -0700696
697 /**
Adam Powell8515ee82010-11-30 14:09:55 -0800698 * Listener for receiving events when action bar menus are shown or hidden.
699 */
700 public interface OnMenuVisibilityListener {
701 /**
702 * Called when an action bar menu is shown or hidden. Applications may want to use
703 * this to tune auto-hiding behavior for the action bar or pause/resume video playback,
704 * gameplay, or other activity within the main content area.
705 *
706 * @param isVisible True if an action bar menu is now visible, false if no action bar
707 * menus are visible.
708 */
709 public void onMenuVisibilityChanged(boolean isVisible);
710 }
711
712 /**
Adam Powell661c9082010-07-02 10:09:44 -0700713 * A tab in the action bar.
714 *
715 * <p>Tabs manage the hiding and showing of {@link Fragment}s.
716 */
717 public static abstract class Tab {
718 /**
719 * An invalid position for a tab.
720 *
721 * @see #getPosition()
722 */
723 public static final int INVALID_POSITION = -1;
724
725 /**
726 * Return the current position of this tab in the action bar.
727 *
728 * @return Current position, or {@link #INVALID_POSITION} if this tab is not currently in
729 * the action bar.
730 */
731 public abstract int getPosition();
732
733 /**
734 * Return the icon associated with this tab.
735 *
736 * @return The tab's icon
737 */
738 public abstract Drawable getIcon();
739
740 /**
741 * Return the text of this tab.
742 *
743 * @return The tab's text
744 */
745 public abstract CharSequence getText();
746
747 /**
748 * Set the icon displayed on this tab.
749 *
750 * @param icon The drawable to use as an icon
Adam Powell9ab97872010-10-26 21:47:29 -0700751 * @return The current instance for call chaining
Adam Powell661c9082010-07-02 10:09:44 -0700752 */
Adam Powell9ab97872010-10-26 21:47:29 -0700753 public abstract Tab setIcon(Drawable icon);
Adam Powell661c9082010-07-02 10:09:44 -0700754
755 /**
Adam Powell32555f32010-11-17 13:49:22 -0800756 * Set the icon displayed on this tab.
757 *
758 * @param resId Resource ID referring to the drawable to use as an icon
759 * @return The current instance for call chaining
760 */
761 public abstract Tab setIcon(int resId);
762
763 /**
Adam Powell661c9082010-07-02 10:09:44 -0700764 * Set the text displayed on this tab. Text may be truncated if there is not
765 * room to display the entire string.
766 *
767 * @param text The text to display
Adam Powell9ab97872010-10-26 21:47:29 -0700768 * @return The current instance for call chaining
Adam Powell661c9082010-07-02 10:09:44 -0700769 */
Adam Powell9ab97872010-10-26 21:47:29 -0700770 public abstract Tab setText(CharSequence text);
Adam Powell661c9082010-07-02 10:09:44 -0700771
772 /**
Adam Powell32555f32010-11-17 13:49:22 -0800773 * Set the text displayed on this tab. Text may be truncated if there is not
774 * room to display the entire string.
775 *
776 * @param resId A resource ID referring to the text that should be displayed
777 * @return The current instance for call chaining
778 */
779 public abstract Tab setText(int resId);
780
781 /**
Adam Powell2b6230e2010-09-07 17:55:25 -0700782 * Set a custom view to be used for this tab. This overrides values set by
783 * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}.
Adam Powell661c9082010-07-02 10:09:44 -0700784 *
Adam Powell2b6230e2010-09-07 17:55:25 -0700785 * @param view Custom view to be used as a tab.
Adam Powell9ab97872010-10-26 21:47:29 -0700786 * @return The current instance for call chaining
Adam Powell661c9082010-07-02 10:09:44 -0700787 */
Adam Powell9ab97872010-10-26 21:47:29 -0700788 public abstract Tab setCustomView(View view);
Adam Powell661c9082010-07-02 10:09:44 -0700789
790 /**
Adam Powell32555f32010-11-17 13:49:22 -0800791 * Set a custom view to be used for this tab. This overrides values set by
792 * {@link #setText(CharSequence)} and {@link #setIcon(Drawable)}.
793 *
794 * @param layoutResId A layout resource to inflate and use as a custom tab view
795 * @return The current instance for call chaining
796 */
797 public abstract Tab setCustomView(int layoutResId);
798
799 /**
Adam Powell2b6230e2010-09-07 17:55:25 -0700800 * Retrieve a previously set custom view for this tab.
Adam Powell661c9082010-07-02 10:09:44 -0700801 *
Adam Powell2b6230e2010-09-07 17:55:25 -0700802 * @return The custom view set by {@link #setCustomView(View)}.
Adam Powell661c9082010-07-02 10:09:44 -0700803 */
Adam Powell2b6230e2010-09-07 17:55:25 -0700804 public abstract View getCustomView();
805
806 /**
807 * Give this Tab an arbitrary object to hold for later use.
808 *
809 * @param obj Object to store
Adam Powell9ab97872010-10-26 21:47:29 -0700810 * @return The current instance for call chaining
Adam Powell2b6230e2010-09-07 17:55:25 -0700811 */
Adam Powell9ab97872010-10-26 21:47:29 -0700812 public abstract Tab setTag(Object obj);
Adam Powell2b6230e2010-09-07 17:55:25 -0700813
814 /**
815 * @return This Tab's tag object.
816 */
817 public abstract Object getTag();
818
819 /**
820 * Set the {@link TabListener} that will handle switching to and from this tab.
821 * All tabs must have a TabListener set before being added to the ActionBar.
822 *
823 * @param listener Listener to handle tab selection events
Adam Powell9ab97872010-10-26 21:47:29 -0700824 * @return The current instance for call chaining
Adam Powell2b6230e2010-09-07 17:55:25 -0700825 */
Adam Powell9ab97872010-10-26 21:47:29 -0700826 public abstract Tab setTabListener(TabListener listener);
Adam Powell661c9082010-07-02 10:09:44 -0700827
828 /**
829 * Select this tab. Only valid if the tab has been added to the action bar.
830 */
831 public abstract void select();
Adam Powell94e56ef2011-09-06 21:22:22 -0700832
833 /**
834 * Set a description of this tab's content for use in accessibility support.
835 * If no content description is provided the title will be used.
836 *
837 * @param resId A resource ID referring to the description text
838 * @return The current instance for call chaining
839 * @see #setContentDescription(CharSequence)
840 * @see #getContentDescription()
841 */
842 public abstract Tab setContentDescription(int resId);
843
844 /**
845 * Set a description of this tab's content for use in accessibility support.
846 * If no content description is provided the title will be used.
847 *
848 * @param contentDesc Description of this tab's content
849 * @return The current instance for call chaining
850 * @see #setContentDescription(int)
851 * @see #getContentDescription()
852 */
853 public abstract Tab setContentDescription(CharSequence contentDesc);
854
855 /**
856 * Gets a brief description of this tab's content for use in accessibility support.
857 *
858 * @return Description of this tab's content
859 * @see #setContentDescription(CharSequence)
860 * @see #setContentDescription(int)
861 */
862 public abstract CharSequence getContentDescription();
Adam Powell661c9082010-07-02 10:09:44 -0700863 }
Adam Powell2b6230e2010-09-07 17:55:25 -0700864
865 /**
866 * Callback interface invoked when a tab is focused, unfocused, added, or removed.
867 */
868 public interface TabListener {
869 /**
870 * Called when a tab enters the selected state.
871 *
872 * @param tab The tab that was selected
873 * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
874 * during a tab switch. The previous tab's unselect and this tab's select will be
Adam Powell0c24a552010-11-03 16:44:11 -0700875 * executed in a single transaction. This FragmentTransaction does not support
876 * being added to the back stack.
Adam Powell2b6230e2010-09-07 17:55:25 -0700877 */
878 public void onTabSelected(Tab tab, FragmentTransaction ft);
879
880 /**
881 * Called when a tab exits the selected state.
882 *
883 * @param tab The tab that was unselected
884 * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
885 * during a tab switch. This tab's unselect and the newly selected tab's select
Adam Powell0c24a552010-11-03 16:44:11 -0700886 * will be executed in a single transaction. This FragmentTransaction does not
887 * support being added to the back stack.
Adam Powell2b6230e2010-09-07 17:55:25 -0700888 */
889 public void onTabUnselected(Tab tab, FragmentTransaction ft);
Adam Powell7f9b9052010-10-19 16:56:07 -0700890
891 /**
892 * Called when a tab that is already selected is chosen again by the user.
893 * Some applications may use this action to return to the top level of a category.
894 *
895 * @param tab The tab that was reselected.
896 * @param ft A {@link FragmentTransaction} for queuing fragment operations to execute
Adam Powell0c24a552010-11-03 16:44:11 -0700897 * once this method returns. This FragmentTransaction does not support
898 * being added to the back stack.
Adam Powell7f9b9052010-10-19 16:56:07 -0700899 */
900 public void onTabReselected(Tab tab, FragmentTransaction ft);
Adam Powell2b6230e2010-09-07 17:55:25 -0700901 }
Adam Powell9ab97872010-10-26 21:47:29 -0700902
903 /**
904 * Per-child layout information associated with action bar custom views.
905 *
906 * @attr ref android.R.styleable#ActionBar_LayoutParams_layout_gravity
907 */
908 public static class LayoutParams extends MarginLayoutParams {
909 /**
910 * Gravity for the view associated with these LayoutParams.
911 *
912 * @see android.view.Gravity
913 */
914 @ViewDebug.ExportedProperty(category = "layout", mapping = {
915 @ViewDebug.IntToString(from = -1, to = "NONE"),
916 @ViewDebug.IntToString(from = Gravity.NO_GRAVITY, to = "NONE"),
917 @ViewDebug.IntToString(from = Gravity.TOP, to = "TOP"),
918 @ViewDebug.IntToString(from = Gravity.BOTTOM, to = "BOTTOM"),
919 @ViewDebug.IntToString(from = Gravity.LEFT, to = "LEFT"),
920 @ViewDebug.IntToString(from = Gravity.RIGHT, to = "RIGHT"),
921 @ViewDebug.IntToString(from = Gravity.CENTER_VERTICAL, to = "CENTER_VERTICAL"),
922 @ViewDebug.IntToString(from = Gravity.FILL_VERTICAL, to = "FILL_VERTICAL"),
923 @ViewDebug.IntToString(from = Gravity.CENTER_HORIZONTAL, to = "CENTER_HORIZONTAL"),
924 @ViewDebug.IntToString(from = Gravity.FILL_HORIZONTAL, to = "FILL_HORIZONTAL"),
925 @ViewDebug.IntToString(from = Gravity.CENTER, to = "CENTER"),
926 @ViewDebug.IntToString(from = Gravity.FILL, to = "FILL")
927 })
928 public int gravity = -1;
929
930 public LayoutParams(Context c, AttributeSet attrs) {
931 super(c, attrs);
932
933 TypedArray a = c.obtainStyledAttributes(attrs,
934 com.android.internal.R.styleable.ActionBar_LayoutParams);
935 gravity = a.getInt(
936 com.android.internal.R.styleable.ActionBar_LayoutParams_layout_gravity, -1);
Dianne Hackbornab0f4852011-09-12 16:59:06 -0700937 a.recycle();
Adam Powell9ab97872010-10-26 21:47:29 -0700938 }
939
940 public LayoutParams(int width, int height) {
941 super(width, height);
942 this.gravity = Gravity.CENTER_VERTICAL | Gravity.LEFT;
943 }
944
945 public LayoutParams(int width, int height, int gravity) {
946 super(width, height);
947 this.gravity = gravity;
948 }
949
950 public LayoutParams(int gravity) {
951 this(WRAP_CONTENT, MATCH_PARENT, gravity);
952 }
953
954 public LayoutParams(LayoutParams source) {
955 super(source);
956
957 this.gravity = source.gravity;
958 }
959
960 public LayoutParams(ViewGroup.LayoutParams source) {
961 super(source);
962 }
963 }
Adam Powell33b97432010-04-20 10:01:14 -0700964}