AppCompatDelegate
abstract class AppCompatDelegate
kotlin.Any | |
↳ | androidx.appcompat.app.AppCompatDelegate |
This class represents a delegate which you can use to extend AppCompat's support to any android.app.Activity
.
When using an AppCompatDelegate
, you should call the following methods instead of the android.app.Activity
method of the same name:
addContentView(android.view.View, android.view.ViewGroup.LayoutParams)
setContentView(int)
setContentView(android.view.View)
setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
requestWindowFeature(int)
hasWindowFeature(int)
invalidateOptionsMenu()
startSupportActionMode(androidx.appcompat.view.ActionMode.Callback)
setSupportActionBar(androidx.appcompat.widget.Toolbar)
getSupportActionBar()
getMenuInflater()
findViewById(int)
The following methods should be called from the android.app.Activity
method of the same name:
onCreate(android.os.Bundle)
onPostCreate(android.os.Bundle)
onConfigurationChanged(android.content.res.Configuration)
onStart()
onStop()
onPostResume()
onSaveInstanceState(Bundle)
setTitle(CharSequence)
onStop()
onDestroy()
An Activity
can only be linked with one AppCompatDelegate
instance, therefore the instance returned from create(Activity, AppCompatCallback)
should be retained until the Activity is destroyed.
Summary
Constants |
|
---|---|
static Int |
Flag for specifying the behavior of action modes when an Action Bar is not present. |
static Int |
Flag for enabling the support Action Bar. |
static Int |
Flag for requesting an support Action Bar that overlays window content. |
static Int | |
static Int |
Night mode which uses a dark mode when the system's 'Battery Saver' feature is enabled, otherwise it uses a 'light mode'. |
static Int |
Night mode which switches between dark and light mode depending on the time of day (dark at night, light in the day). |
static Int |
Mode which uses the system's night mode setting to determine if it is night or not. |
static Int |
Night mode which uses always uses a light mode, enabling |
static Int |
An unspecified mode for night mode. |
static Int |
Night mode which uses always uses a dark mode, enabling |
Public methods |
|
---|---|
abstract Unit |
addContentView(v: View!, lp: LayoutParams!) Should be called instead of |
abstract Boolean |
Applies the currently selected night mode to this delegate's host component. |
open Unit |
attachBaseContext(context: Context!) Should be called from |
open static AppCompatDelegate |
create(@NonNull activity: Activity, @Nullable callback: AppCompatCallback?) Create an |
open static AppCompatDelegate |
create(@NonNull dialog: Dialog, @Nullable callback: AppCompatCallback?) Create an |
open static AppCompatDelegate |
create(@NonNull context: Context, @NonNull window: Window, @Nullable callback: AppCompatCallback?) Create an |
open static AppCompatDelegate |
create(@NonNull context: Context, @NonNull activity: Activity, @Nullable callback: AppCompatCallback?) Create an |
abstract View! |
createView(@Nullable parent: View?, name: String!, @NonNull context: Context, @NonNull attrs: AttributeSet) This should be called from a |
abstract T? |
findViewById(@IdRes id: Int) Finds a view that was identified by the id attribute from the XML that was processed in |
open static Int |
Returns the default night mode. |
abstract ActionBarDrawerToggle.Delegate? |
Returns an |
open Int |
Returns the night mode previously set via |
abstract MenuInflater! |
Return the value of this call from your |
abstract ActionBar? |
Support library version of |
abstract Boolean |
hasWindowFeature(featureId: Int) Query for the availability of a certain feature. |
abstract Unit |
Installs AppCompat's |
abstract Unit |
Should be called from |
open static Boolean |
Returns whether vector drawables on older platforms (< API 21) can be accessed from within resources. |
abstract Boolean |
Returns whether AppCompat handles any native action modes itself. |
abstract Unit |
onConfigurationChanged(newConfig: Configuration!) Should be called from |
abstract Unit |
Should be called from |
abstract Unit |
Should be called from |
abstract Unit |
onPostCreate(savedInstanceState: Bundle!) Should be called from |
abstract Unit |
Should be called from |
abstract Unit |
onSaveInstanceState(outState: Bundle!) Allows AppCompat to save instance state. |
abstract Unit |
onStart() Should be called from |
abstract Unit |
onStop() Should be called from |
abstract Boolean |
requestWindowFeature(featureId: Int) Enable extended window features. |
open static Unit |
setCompatVectorFromResourcesEnabled(enabled: Boolean) Sets whether vector drawables on older platforms (< API 21) can be used within |
abstract Unit |
setContentView(v: View!) Should be called instead of |
abstract Unit |
setContentView(@LayoutRes resId: Int) Should be called instead of |
abstract Unit |
setContentView(v: View!, lp: LayoutParams!) Should be called instead of |
open static Unit |
setDefaultNightMode(mode: Int) Sets the default night mode. |
abstract Unit |
setHandleNativeActionModesEnabled(enabled: Boolean) Whether AppCompat handles any native action modes itself. |
abstract Unit |
setLocalNightMode(mode: Int) Override the night mode used for this delegate's host component. |
abstract Unit |
setSupportActionBar(@Nullable toolbar: Toolbar?) |
open Unit |
This should be called from |
abstract Unit |
setTitle(@Nullable title: CharSequence?) Should be called from |
abstract ActionMode? |
startSupportActionMode(@NonNull callback: ActionMode.Callback) Start an action mode. |
Constants
FEATURE_ACTION_MODE_OVERLAY
static val FEATURE_ACTION_MODE_OVERLAY: Int
Flag for specifying the behavior of action modes when an Action Bar is not present. If overlay is enabled, the action mode UI will be allowed to cover existing window content.
Value: WindowCompat.FEATURE_ACTION_MODE_OVERLAY
FEATURE_SUPPORT_ACTION_BAR
static val FEATURE_SUPPORT_ACTION_BAR: Int
Flag for enabling the support Action Bar.
This is enabled by default for some devices. The Action Bar replaces the title bar and provides an alternate location for an on-screen menu button on some devices.
Value: 100 + WindowCompat.FEATURE_ACTION_BAR
FEATURE_SUPPORT_ACTION_BAR_OVERLAY
static val FEATURE_SUPPORT_ACTION_BAR_OVERLAY: Int
Flag for requesting an support Action Bar that overlays window content. Normally an Action Bar will sit in the space above window content, but if this feature is requested along with FEATURE_SUPPORT_ACTION_BAR
it will be layered over the window content itself. This is useful if you would like your app to have more control over how the Action Bar is displayed, such as letting application content scroll beneath an Action Bar with a transparent background or otherwise displaying a transparent/translucent Action Bar over application content.
This mode is especially useful with View.SYSTEM_UI_FLAG_FULLSCREEN
, which allows you to seamlessly hide the action bar in conjunction with other screen decorations. When an ActionBar is in this mode it will adjust the insets provided to View.fitSystemWindows(Rect)
to include the content covered by the action bar, so you can do layout within that space.
Value: 100 + WindowCompat.FEATURE_ACTION_BAR_OVERLAY
MODE_NIGHT_AUTO
static valMODE_NIGHT_AUTO: Int
Deprecated: Use AppCompatDelegate#MODE_NIGHT_AUTO_TIME
instead
Value: MODE_NIGHT_AUTO_TIME
MODE_NIGHT_AUTO_BATTERY
static val MODE_NIGHT_AUTO_BATTERY: Int
Night mode which uses a dark mode when the system's 'Battery Saver' feature is enabled, otherwise it uses a 'light mode'. This mode can help the device to decrease power usage, depending on the display technology in the device. Please note: this mode should only be used when running on devices which do not provide a similar device-wide setting.
Value: 3
See Also
MODE_NIGHT_AUTO_TIME
static valMODE_NIGHT_AUTO_TIME: Int
Deprecated: Automatic switching of dark/light based on the current time is deprecated. Considering using an explicit setting, or MODE_NIGHT_AUTO_BATTERY
.
Night mode which switches between dark and light mode depending on the time of day (dark at night, light in the day).
The calculation used to determine whether it is night or not makes use of the location APIs (if this app has the necessary permissions). This allows us to generate accurate sunrise and sunset times. If this app does not have permission to access the location APIs then we use hardcoded times which will be less accurate.
Value: 0
MODE_NIGHT_FOLLOW_SYSTEM
static val MODE_NIGHT_FOLLOW_SYSTEM: Int
Mode which uses the system's night mode setting to determine if it is night or not.
Value: -1
See Also
MODE_NIGHT_NO
static val MODE_NIGHT_NO: Int
Night mode which uses always uses a light mode, enabling notnight
qualified resources regardless of the time.
Value: 1
See Also
MODE_NIGHT_UNSPECIFIED
static val MODE_NIGHT_UNSPECIFIED: Int
An unspecified mode for night mode. This is primarily used with setLocalNightMode(int)
, to allow the default night mode to be used. If both the default and local night modes are set to this value, then the default value of MODE_NIGHT_FOLLOW_SYSTEM
is applied.
Value: -100
MODE_NIGHT_YES
static val MODE_NIGHT_YES: Int
Night mode which uses always uses a dark mode, enabling night
qualified resources regardless of the time.
Value: 2
See Also
Public methods
addContentView
abstract fun addContentView(v: View!, lp: LayoutParams!): Unit
Should be called instead of Activity#addContentView(android.view.View, android.view.ViewGroup.LayoutParams)
}
applyDayNight
abstract fun applyDayNight(): Boolean
Applies the currently selected night mode to this delegate's host component.
This enables the androidx.appcompat.R.style#Theme_AppCompat_DayNight family of themes to work, using the specified mode.
You can be notified when the night changes by overriding the AppCompatActivity#onNightModeChanged(int)
method.
Return | |
---|---|
Boolean: true if the night mode was applied, false if not |
attachBaseContext
open fun attachBaseContext(context: Context!): Unit
Should be called from Activity#attachBaseContext(Context)
create
@NonNull open static fun create(@NonNull activity: Activity, @Nullable callback: AppCompatCallback?): AppCompatDelegate
Create an androidx.appcompat.app.AppCompatDelegate
to use with activity
.
Parameters | |
---|---|
callback |
Activity: An optional callback for AppCompat specific events |
create
@NonNull open static fun create(@NonNull dialog: Dialog, @Nullable callback: AppCompatCallback?): AppCompatDelegate
Create an androidx.appcompat.app.AppCompatDelegate
to use with dialog
.
Parameters | |
---|---|
callback |
Dialog: An optional callback for AppCompat specific events |
create
@NonNull open static fun create(@NonNull context: Context, @NonNull window: Window, @Nullable callback: AppCompatCallback?): AppCompatDelegate
Create an androidx.appcompat.app.AppCompatDelegate
to use with a context
and a window
.
Parameters | |
---|---|
callback |
Context: An optional callback for AppCompat specific events |
create
@NonNull open static fun create(@NonNull context: Context, @NonNull activity: Activity, @Nullable callback: AppCompatCallback?): AppCompatDelegate
Create an androidx.appcompat.app.AppCompatDelegate
to use with a context
and hosted by an Activity
.
Parameters | |
---|---|
callback |
Context: An optional callback for AppCompat specific events |
createView
abstract fun createView(@Nullable parent: View?, name: String!, @NonNull context: Context, @NonNull attrs: AttributeSet): View!
This should be called from a LayoutInflater.Factory2
in order to return tint-aware widgets.
This is only needed if you are using your own LayoutInflater
factory, and have therefore not installed the default factory via installViewFactory()
.
findViewById
@Nullable abstract fun <T : View!> findViewById(@IdRes id: Int): T?
Finds a view that was identified by the id attribute from the XML that was processed in onCreate
.
Return | |
---|---|
T?: The view if found or null otherwise. |
getDefaultNightMode
open static fun getDefaultNightMode(): Int
Returns the default night mode.
See Also
getDrawerToggleDelegate
@Nullable abstract fun getDrawerToggleDelegate(): ActionBarDrawerToggle.Delegate?
Returns an ActionBarDrawerToggle.Delegate
which can be returned from your Activity if it implements ActionBarDrawerToggle.DelegateProvider
.
getLocalNightMode
open fun getLocalNightMode(): Int
Returns the night mode previously set via getLocalNightMode()
.
getMenuInflater
abstract fun getMenuInflater(): MenuInflater!
Return the value of this call from your Activity#getMenuInflater()
getSupportActionBar
@Nullable abstract fun getSupportActionBar(): ActionBar?
Support library version of Activity#getActionBar
.
Return | |
---|---|
ActionBar?: AppCompat's action bar, or null if it does not have one. |
hasWindowFeature
abstract fun hasWindowFeature(featureId: Int): Boolean
Query for the availability of a certain feature.
This should be called instead of android.view.Window#hasFeature(int)
.
Parameters | |
---|---|
featureId |
Int: The feature ID to check |
Return | |
---|---|
Boolean: true if the feature is enabled, false otherwise. |
installViewFactory
abstract fun installViewFactory(): Unit
Installs AppCompat's android.view.LayoutInflater
Factory so that it can replace the framework widgets with compatible tinted versions. This should be called before super.onCreate()
as so:
protected void onCreate(Bundle savedInstanceState) {
getDelegate().installViewFactory();
getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
// ...
}
If you are using your own Factory
or Factory2
then you can omit this call, and instead call createView(android.view.View, String, android.content.Context, android.util.AttributeSet)
from your factory to return any compatible widgets.
invalidateOptionsMenu
abstract fun invalidateOptionsMenu(): Unit
Should be called from Activity#invalidateOptionsMenu()
} or FragmentActivity#supportInvalidateOptionsMenu()
.
isCompatVectorFromResourcesEnabled
open static fun isCompatVectorFromResourcesEnabled(): Boolean
Returns whether vector drawables on older platforms (< API 21) can be accessed from within resources.
isHandleNativeActionModesEnabled
abstract fun isHandleNativeActionModesEnabled(): Boolean
Returns whether AppCompat handles any native action modes itself.
Return | |
---|---|
Boolean: true if AppCompat should handle native action modes. |
onConfigurationChanged
abstract fun onConfigurationChanged(newConfig: Configuration!): Unit
Should be called from Activity#onConfigurationChanged
onCreate
abstract fun onCreate(savedInstanceState: Bundle!): Unit
Should be called from Activity.onCreate()
.
This should be called before super.onCreate()
as so:
protected void onCreate(Bundle savedInstanceState) {
getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
// ...
}
onPostCreate
abstract fun onPostCreate(savedInstanceState: Bundle!): Unit
Should be called from Activity#onPostCreate(android.os.Bundle)
onSaveInstanceState
abstract fun onSaveInstanceState(outState: Bundle!): Unit
Allows AppCompat to save instance state.
requestWindowFeature
abstract fun requestWindowFeature(featureId: Int): Boolean
Enable extended window features. This should be called instead of android.app.Activity#requestWindowFeature(int)
or getWindow().requestFeature()
.
Parameters | |
---|---|
featureId |
Int: The desired feature as defined in android.view.Window . |
Return | |
---|---|
Boolean: Returns true if the requested feature is supported and now enabled. |
setCompatVectorFromResourcesEnabled
open static fun setCompatVectorFromResourcesEnabled(enabled: Boolean): Unit
Sets whether vector drawables on older platforms (< API 21) can be used within android.graphics.drawable.DrawableContainer
resources.
When enabled, AppCompat can intercept some drawable inflation from the framework, which enables implicit inflation of vector drawables within android.graphics.drawable.DrawableContainer
resources. You can then use those drawables in places such as android:src
on android.widget.ImageView
, or android:drawableLeft
on android.widget.TextView
. Example usage:
<selector xmlns:android="...">
<item android:state_checked="true"
android:drawable="@drawable/vector_checked_icon" />
<item android:drawable="@drawable/vector_icon" />
</selector>
<TextView
...
android:drawableLeft="@drawable/vector_state_list_icon" />
This feature defaults to disabled, since enabling it can cause issues with memory usage, and problems updating Configuration
instances. If you update the configuration manually, then you probably do not want to enable this. You have been warned.
Even with this disabled, you can still use vector resources through androidx.appcompat.widget.AppCompatImageView#setImageResource(int)
and its app:srcCompat
attribute. They can also be used in anything which AppCompat inflates for you, such as menu resources.
Please note: this only takes effect in Activities created after this call.
setContentView
abstract fun setContentView(v: View!): Unit
Should be called instead of Activity#setContentView(android.view.View)
}
setContentView
abstract fun setContentView(@LayoutRes resId: Int): Unit
Should be called instead of Activity#setContentView(int)
}
setContentView
abstract fun setContentView(v: View!, lp: LayoutParams!): Unit
Should be called instead of Activity#setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
}
setDefaultNightMode
open static fun setDefaultNightMode(mode: Int): Unit
Sets the default night mode. This is the default value used for all components, but can be overridden locally via setLocalNightMode(int)
.
This is the primary method to control the DayNight functionality, since it allows the delegates to avoid unnecessary recreations when possible.
If this method is called after any host components with attached AppCompatDelegate
s have been 'started', a uiMode
configuration change will occur in each. This may result in those components being recreated, depending on their manifest configuration.
Defaults to MODE_NIGHT_FOLLOW_SYSTEM
.
setHandleNativeActionModesEnabled
abstract fun setHandleNativeActionModesEnabled(enabled: Boolean): Unit
Whether AppCompat handles any native action modes itself.
This methods only takes effect on android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH
and above.
Parameters | |
---|---|
enabled |
Boolean: whether AppCompat should handle native action modes. |
setLocalNightMode
abstract fun setLocalNightMode(mode: Int): Unit
Override the night mode used for this delegate's host component.
When setting an mode to be used across an entire app, the setDefaultNightMode(int)
method is preferred.
If this is called after the host component has been created, a uiMode
configuration change will occur, which may result in the component being recreated.
It is not recommended to use this method on a delegate attached to a Dialog
. Dialogs use the host Activity as their context, resulting in the dialog's night mode overriding the Activity's night mode.
setSupportActionBar
abstract fun setSupportActionBar(@Nullable toolbar: Toolbar?): Unit
Set a Toolbar
to act as the ActionBar
for this delegate.
When set to a non-null value the getSupportActionBar()
()} method will return an ActionBar
object that can be used to control the given toolbar as if it were a traditional window decor action bar. The toolbar's menu will be populated with the Activity's options menu and the navigation button will be wired through the standard home
menu select action.
In order to use a Toolbar within the Activity's window content the application must not request the window feature FEATURE_SUPPORT_ACTION_BAR
.
Parameters | |
---|---|
toolbar |
Toolbar?: Toolbar to set as the Activity's action bar, or null to clear it |
setTheme
open fun setTheme(@StyleRes themeResId: Int): Unit
This should be called from Activity#setTheme(int)
to notify AppCompat of what the current theme resource id is.
setTitle
abstract fun setTitle(@Nullable title: CharSequence?): Unit
Should be called from Activity#onTitleChanged(CharSequence, int)
}
startSupportActionMode
@Nullable abstract fun startSupportActionMode(@NonNull callback: ActionMode.Callback): ActionMode?
Start an action mode.
Parameters | |
---|---|
callback |
ActionMode.Callback: Callback that will manage lifecycle events for this context mode |
Return | |
---|---|
ActionMode?: The ContextMode that was started, or null if it was canceled |