FileDocCategorySizeDatePackage
ViewConfiguration.javaAPI DocAndroid 5.1 API25569Thu Mar 12 22:22:10 GMT 2015android.view

ViewConfiguration

public class ViewConfiguration extends Object
Contains methods to standard constants used in the UI for timeouts, sizes, and distances.

Fields Summary
private static final int
SCROLL_BAR_SIZE
Defines the width of the horizontal scrollbar and the height of the vertical scrollbar in dips
private static final int
SCROLL_BAR_FADE_DURATION
Duration of the fade when scrollbars fade away in milliseconds
private static final int
SCROLL_BAR_DEFAULT_DELAY
Default delay before the scrollbars fade in milliseconds
private static final int
FADING_EDGE_LENGTH
Defines the length of the fading edges in dips
private static final int
PRESSED_STATE_DURATION
Defines the duration in milliseconds of the pressed state in child components.
private static final int
DEFAULT_LONG_PRESS_TIMEOUT
Defines the default duration in milliseconds before a press turns into a long press
private static final int
KEY_REPEAT_DELAY
Defines the time between successive key repeats in milliseconds.
private static final int
GLOBAL_ACTIONS_KEY_TIMEOUT
Defines the duration in milliseconds a user needs to hold down the appropriate button to bring up the global actions dialog (power off, lock screen, etc).
private static final int
TAP_TIMEOUT
Defines the duration in milliseconds we will wait to see if a touch event is a tap or a scroll. If the user does not move within this interval, it is considered to be a tap.
private static final int
JUMP_TAP_TIMEOUT
Defines the duration in milliseconds we will wait to see if a touch event is a jump tap. If the user does not complete the jump tap within this interval, it is considered to be a tap.
private static final int
DOUBLE_TAP_TIMEOUT
Defines the duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
private static final int
DOUBLE_TAP_MIN_TIME
Defines the minimum duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
private static final int
HOVER_TAP_TIMEOUT
Defines the maximum duration in milliseconds between a touch pad touch and release for a given touch to be considered a tap (click) as opposed to a hover movement gesture.
private static final int
HOVER_TAP_SLOP
Defines the maximum distance in pixels that a touch pad touch can move before being released for it to be considered a tap (click) as opposed to a hover movement gesture.
private static final int
ZOOM_CONTROLS_TIMEOUT
Defines the duration in milliseconds we want to display zoom controls in response to a user panning within an application.
private static final int
EDGE_SLOP
Inset in dips to look for touchable content when the user touches the edge of the screen
private static final int
TOUCH_SLOP
Distance a touch can wander before we think the user is scrolling in dips. Note that this value defined here is only used as a fallback by legacy/misbehaving applications that do not provide a Context for determining density/configuration-dependent values. To alter this value, see the configuration resource config_viewConfigurationTouchSlop in frameworks/base/core/res/res/values/config.xml or the appropriate device resource overlay. It may be appropriate to tweak this on a device-specific basis in an overlay based on the characteristics of the touch panel and firmware.
private static final int
DOUBLE_TAP_TOUCH_SLOP
Distance the first touch can wander before we stop considering this event a double tap (in dips)
private static final int
PAGING_TOUCH_SLOP
Distance a touch can wander before we think the user is attempting a paged scroll (in dips) Note that this value defined here is only used as a fallback by legacy/misbehaving applications that do not provide a Context for determining density/configuration-dependent values. See the note above on {@link #TOUCH_SLOP} regarding the dimen resource config_viewConfigurationTouchSlop. ViewConfiguration will report a paging touch slop of config_viewConfigurationTouchSlop * 2 when provided with a Context.
private static final int
DOUBLE_TAP_SLOP
Distance in dips between the first touch and second touch to still be considered a double tap
private static final int
WINDOW_TOUCH_SLOP
Distance in dips a touch needs to be outside of a window's bounds for it to count as outside for purposes of dismissing the window.
private static final int
MINIMUM_FLING_VELOCITY
Minimum velocity to initiate a fling, as measured in dips per second
private static final int
MAXIMUM_FLING_VELOCITY
Maximum velocity to initiate a fling, as measured in dips per second
private static final long
SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS
Delay before dispatching a recurring accessibility event in milliseconds. This delay guarantees that a recurring event will be send at most once during the {@link #SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS} time frame.
private static final int
MAXIMUM_DRAWING_CACHE_SIZE
The maximum size of View's drawing cache, expressed in bytes. This size should be at least equal to the size of the screen in ARGB888 format.
private static final float
SCROLL_FRICTION
The coefficient of friction applied to flings/scrolls.
private static final int
OVERSCROLL_DISTANCE
Max distance in dips to overscroll for edge effects
private static final int
OVERFLING_DISTANCE
Max distance in dips to overfling for edge effects
private static final int
HAS_PERMANENT_MENU_KEY_AUTODETECT
Configuration values for overriding {@link #hasPermanentMenuKey()} behavior. These constants must match the definition in res/values/config.xml.
private static final int
HAS_PERMANENT_MENU_KEY_TRUE
private static final int
HAS_PERMANENT_MENU_KEY_FALSE
private final int
mEdgeSlop
private final int
mFadingEdgeLength
private final int
mMinimumFlingVelocity
private final int
mMaximumFlingVelocity
private final int
mScrollbarSize
private final int
mTouchSlop
private final int
mDoubleTapTouchSlop
private final int
mPagingTouchSlop
private final int
mDoubleTapSlop
private final int
mWindowTouchSlop
private final int
mMaximumDrawingCacheSize
private final int
mOverscrollDistance
private final int
mOverflingDistance
private final boolean
mFadingMarqueeEnabled
private final long
mGlobalActionsKeyTimeout
private boolean
sHasPermanentMenuKey
private boolean
sHasPermanentMenuKeySet
static final android.util.SparseArray
sConfigurations
Constructors Summary
public ViewConfiguration()

deprecated
Use {@link android.view.ViewConfiguration#get(android.content.Context)} instead.


              
    
      
        mEdgeSlop = EDGE_SLOP;
        mFadingEdgeLength = FADING_EDGE_LENGTH;
        mMinimumFlingVelocity = MINIMUM_FLING_VELOCITY;
        mMaximumFlingVelocity = MAXIMUM_FLING_VELOCITY;
        mScrollbarSize = SCROLL_BAR_SIZE;
        mTouchSlop = TOUCH_SLOP;
        mDoubleTapTouchSlop = DOUBLE_TAP_TOUCH_SLOP;
        mPagingTouchSlop = PAGING_TOUCH_SLOP;
        mDoubleTapSlop = DOUBLE_TAP_SLOP;
        mWindowTouchSlop = WINDOW_TOUCH_SLOP;
        //noinspection deprecation
        mMaximumDrawingCacheSize = MAXIMUM_DRAWING_CACHE_SIZE;
        mOverscrollDistance = OVERSCROLL_DISTANCE;
        mOverflingDistance = OVERFLING_DISTANCE;
        mFadingMarqueeEnabled = true;
        mGlobalActionsKeyTimeout = GLOBAL_ACTIONS_KEY_TIMEOUT;
    
private ViewConfiguration(android.content.Context context)
Creates a new configuration for the specified context. The configuration depends on various parameters of the context, like the dimension of the display or the density of the display.

param
context The application context used to initialize this view configuration.
see
#get(android.content.Context)
see
android.util.DisplayMetrics

        final Resources res = context.getResources();
        final DisplayMetrics metrics = res.getDisplayMetrics();
        final Configuration config = res.getConfiguration();
        final float density = metrics.density;
        final float sizeAndDensity;
        if (config.isLayoutSizeAtLeast(Configuration.SCREENLAYOUT_SIZE_XLARGE)) {
            sizeAndDensity = density * 1.5f;
        } else {
            sizeAndDensity = density;
        }

        mEdgeSlop = (int) (sizeAndDensity * EDGE_SLOP + 0.5f);
        mFadingEdgeLength = (int) (sizeAndDensity * FADING_EDGE_LENGTH + 0.5f);
        mScrollbarSize = (int) (density * SCROLL_BAR_SIZE + 0.5f);
        mDoubleTapSlop = (int) (sizeAndDensity * DOUBLE_TAP_SLOP + 0.5f);
        mWindowTouchSlop = (int) (sizeAndDensity * WINDOW_TOUCH_SLOP + 0.5f);

        // Size of the screen in bytes, in ARGB_8888 format
        final WindowManager win = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
        final Display display = win.getDefaultDisplay();
        final Point size = new Point();
        display.getRealSize(size);
        mMaximumDrawingCacheSize = 4 * size.x * size.y;

        mOverscrollDistance = (int) (sizeAndDensity * OVERSCROLL_DISTANCE + 0.5f);
        mOverflingDistance = (int) (sizeAndDensity * OVERFLING_DISTANCE + 0.5f);

        if (!sHasPermanentMenuKeySet) {
            final int configVal = res.getInteger(
                    com.android.internal.R.integer.config_overrideHasPermanentMenuKey);

            switch (configVal) {
                default:
                case HAS_PERMANENT_MENU_KEY_AUTODETECT: {
                    IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
                    try {
                        sHasPermanentMenuKey = !wm.hasNavigationBar();
                        sHasPermanentMenuKeySet = true;
                    } catch (RemoteException ex) {
                        sHasPermanentMenuKey = false;
                    }
                }
                break;

                case HAS_PERMANENT_MENU_KEY_TRUE:
                    sHasPermanentMenuKey = true;
                    sHasPermanentMenuKeySet = true;
                    break;

                case HAS_PERMANENT_MENU_KEY_FALSE:
                    sHasPermanentMenuKey = false;
                    sHasPermanentMenuKeySet = true;
                    break;
            }
        }

        mFadingMarqueeEnabled = res.getBoolean(
                com.android.internal.R.bool.config_ui_enableFadingMarquee);
        mTouchSlop = res.getDimensionPixelSize(
                com.android.internal.R.dimen.config_viewConfigurationTouchSlop);
        mPagingTouchSlop = mTouchSlop * 2;

        mDoubleTapTouchSlop = mTouchSlop;

        mMinimumFlingVelocity = res.getDimensionPixelSize(
                com.android.internal.R.dimen.config_viewMinFlingVelocity);
        mMaximumFlingVelocity = res.getDimensionPixelSize(
                com.android.internal.R.dimen.config_viewMaxFlingVelocity);
        mGlobalActionsKeyTimeout = res.getInteger(
                com.android.internal.R.integer.config_globalActionsKeyTimeout);
    
Methods Summary
public static android.view.ViewConfigurationget(android.content.Context context)
Returns a configuration for the specified context. The configuration depends on various parameters of the context, like the dimension of the display or the density of the display.

param
context The application context used to initialize the view configuration.

        final DisplayMetrics metrics = context.getResources().getDisplayMetrics();
        final int density = (int) (100.0f * metrics.density);

        ViewConfiguration configuration = sConfigurations.get(density);
        if (configuration == null) {
            configuration = new ViewConfiguration(context);
            sConfigurations.put(density, configuration);
        }

        return configuration;
    
public longgetDeviceGlobalActionKeyTimeout()
The amount of time a user needs to press the relevant key to bring up the global actions dialog.

return
how long a user needs to press the relevant key to bring up the global actions dialog.
hide

        return mGlobalActionsKeyTimeout;
    
public static intgetDoubleTapMinTime()

return
the minimum duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.
hide

        return DOUBLE_TAP_MIN_TIME;
    
public static intgetDoubleTapSlop()

return
Distance in dips between the first touch and second touch to still be considered a double tap
deprecated
Use {@link #getScaledDoubleTapSlop()} instead.
hide
The only client of this should be GestureDetector, which needs this for clients that still use its deprecated constructor.

        return DOUBLE_TAP_SLOP;
    
public static intgetDoubleTapTimeout()

return
the duration in milliseconds between the first tap's up event and the second tap's down event for an interaction to be considered a double-tap.

        return DOUBLE_TAP_TIMEOUT;
    
public static intgetEdgeSlop()

return
Inset in dips to look for touchable content when the user touches the edge of the screen
deprecated
Use {@link #getScaledEdgeSlop()} instead.

        return EDGE_SLOP;
    
public static intgetFadingEdgeLength()

return
the length of the fading edges in dips
deprecated
Use {@link #getScaledFadingEdgeLength()} instead.

        return FADING_EDGE_LENGTH;
    
public static longgetGlobalActionKeyTimeout()
The amount of time a user needs to press the relevant key to bring up the global actions dialog.

return
how long a user needs to press the relevant key to bring up the global actions dialog.
deprecated
This timeout should not be used by applications

        return GLOBAL_ACTIONS_KEY_TIMEOUT;
    
public static intgetHoverTapSlop()

return
the maximum distance in pixels that a touch pad touch can move before being released for it to be considered a tap (click) as opposed to a hover movement gesture.
hide

        return HOVER_TAP_SLOP;
    
public static intgetHoverTapTimeout()

return
the maximum duration in milliseconds between a touch pad touch and release for a given touch to be considered a tap (click) as opposed to a hover movement gesture.
hide

        return HOVER_TAP_TIMEOUT;
    
public static intgetJumpTapTimeout()

return
the duration in milliseconds we will wait to see if a touch event is a jump tap. If the user does not move within this interval, it is considered to be a tap.

        return JUMP_TAP_TIMEOUT;
    
public static intgetKeyRepeatDelay()

return
the time between successive key repeats in milliseconds.

        return KEY_REPEAT_DELAY;
    
public static intgetKeyRepeatTimeout()

return
the time before the first key repeat in milliseconds.

        return getLongPressTimeout();
    
public static intgetLongPressTimeout()

return
the duration in milliseconds before a press turns into a long press

        return AppGlobals.getIntCoreSetting(Settings.Secure.LONG_PRESS_TIMEOUT,
                DEFAULT_LONG_PRESS_TIMEOUT);
    
public static intgetMaximumDrawingCacheSize()
The maximum drawing cache size expressed in bytes.

return
the maximum size of View's drawing cache expressed in bytes
deprecated
Use {@link #getScaledMaximumDrawingCacheSize()} instead.

        //noinspection deprecation
        return MAXIMUM_DRAWING_CACHE_SIZE;
    
public static intgetMaximumFlingVelocity()

return
Maximum velocity to initiate a fling, as measured in dips per second.
deprecated
Use {@link #getScaledMaximumFlingVelocity()} instead.

        return MAXIMUM_FLING_VELOCITY;
    
public static intgetMinimumFlingVelocity()

return
Minimum velocity to initiate a fling, as measured in dips per second.
deprecated
Use {@link #getScaledMinimumFlingVelocity()} instead.

        return MINIMUM_FLING_VELOCITY;
    
public static intgetPressedStateDuration()

return
the duration in milliseconds of the pressed state in child components.

        return PRESSED_STATE_DURATION;
    
public intgetScaledDoubleTapSlop()

return
Distance in pixels between the first touch and second touch to still be considered a double tap

        return mDoubleTapSlop;
    
public intgetScaledDoubleTapTouchSlop()

return
Distance in pixels the first touch can wander before we do not consider this a potential double tap event
hide

        return mDoubleTapTouchSlop;
    
public intgetScaledEdgeSlop()

return
Inset in pixels to look for touchable content when the user touches the edge of the screen

        return mEdgeSlop;
    
public intgetScaledFadingEdgeLength()

return
the length of the fading edges in pixels

        return mFadingEdgeLength;
    
public intgetScaledMaximumDrawingCacheSize()
The maximum drawing cache size expressed in bytes.

return
the maximum size of View's drawing cache expressed in bytes

        return mMaximumDrawingCacheSize;
    
public intgetScaledMaximumFlingVelocity()

return
Maximum velocity to initiate a fling, as measured in pixels per second.

        return mMaximumFlingVelocity;
    
public intgetScaledMinimumFlingVelocity()

return
Minimum velocity to initiate a fling, as measured in pixels per second.

        return mMinimumFlingVelocity;
    
public intgetScaledOverflingDistance()

return
The maximum distance a View should overfling by when showing edge effects (in pixels).

        return mOverflingDistance;
    
public intgetScaledOverscrollDistance()

return
The maximum distance a View should overscroll by when showing edge effects (in pixels).

        return mOverscrollDistance;
    
public intgetScaledPagingTouchSlop()

return
Distance in pixels a touch can wander before we think the user is scrolling a full page

        return mPagingTouchSlop;
    
public intgetScaledScrollBarSize()

return
The width of the horizontal scrollbar and the height of the vertical scrollbar in pixels

        return mScrollbarSize;
    
public intgetScaledTouchSlop()

return
Distance in pixels a touch can wander before we think the user is scrolling

        return mTouchSlop;
    
public intgetScaledWindowTouchSlop()

return
Distance in pixels a touch must be outside the bounds of a window for it to be counted as outside the window for purposes of dismissing that window.

        return mWindowTouchSlop;
    
public static intgetScrollBarFadeDuration()

return
Duration of the fade when scrollbars fade away in milliseconds

        return SCROLL_BAR_FADE_DURATION;
    
public static intgetScrollBarSize()

return
The width of the horizontal scrollbar and the height of the vertical scrollbar in dips
deprecated
Use {@link #getScaledScrollBarSize()} instead.

        return SCROLL_BAR_SIZE;
    
public static intgetScrollDefaultDelay()

return
Default delay before the scrollbars fade in milliseconds

        return SCROLL_BAR_DEFAULT_DELAY;
    
public static floatgetScrollFriction()
The amount of friction applied to scrolls and flings.

return
A scalar dimensionless value representing the coefficient of friction.

        return SCROLL_FRICTION;
    
public static longgetSendRecurringAccessibilityEventsInterval()
Interval for dispatching a recurring accessibility event in milliseconds. This interval guarantees that a recurring event will be send at most once during the {@link #getSendRecurringAccessibilityEventsInterval()} time frame.

return
The delay in milliseconds.
hide

        return SEND_RECURRING_ACCESSIBILITY_EVENTS_INTERVAL_MILLIS;
    
public static intgetTapTimeout()

return
the duration in milliseconds we will wait to see if a touch event is a tap or a scroll. If the user does not move within this interval, it is considered to be a tap.

        return TAP_TIMEOUT;
    
public static intgetTouchSlop()

return
Distance in dips a touch can wander before we think the user is scrolling
deprecated
Use {@link #getScaledTouchSlop()} instead.

        return TOUCH_SLOP;
    
public static intgetWindowTouchSlop()

return
Distance in dips a touch must be outside the bounds of a window for it to be counted as outside the window for purposes of dismissing that window.
deprecated
Use {@link #getScaledWindowTouchSlop()} instead.

        return WINDOW_TOUCH_SLOP;
    
public static longgetZoomControlsTimeout()
The amount of time that the zoom controls should be displayed on the screen expressed in milliseconds.

return
the time the zoom controls should be visible expressed in milliseconds.

        return ZOOM_CONTROLS_TIMEOUT;
    
public booleanhasPermanentMenuKey()
Report if the device has a permanent menu key available to the user.

As of Android 3.0, devices may not have a permanent menu key available. Apps should use the action bar to present menu options to users. However, there are some apps where the action bar is inappropriate or undesirable. This method may be used to detect if a menu key is present. If not, applications should provide another on-screen affordance to access functionality.

return
true if a permanent menu key is present, false otherwise.

        return sHasPermanentMenuKey;
    
public booleanisFadingMarqueeEnabled()

hide
return
Whether or not marquee should use fading edges.

        return mFadingMarqueeEnabled;