syntax:
:

    ```xml
    <uses-configuration
      android:reqFiveWayNav=["true" | "false"]
      android:reqHardKeyboard=["true" | "false"]
      android:reqKeyboardType=["undefined" | "nokeys" | "qwerty" | "twelvekey"]
      android:reqNavigation=["undefined" | "nonav" | "dpad" | "trackball" | "wheel"]
      android:reqTouchScreen=["undefined" | "notouch" | "stylus" | "finger"] />
    ```

contained in:
:   [<manifest>](https://developer.android.com/guide/topics/manifest/manifest-element)

description:

:   Indicates the hardware and software features the application requires.
    For example, an application might specify that it requires a physical keyboard
    or a particular navigation device, like a trackball. The specification is
    used to avoid installing the application on devices where it doesn't work.

    **Note:** Most apps don't use this manifest tag.
    *Always* support input with a directional pad (D-pad) to assist sight-impaired
    users and support devices that provide D-pad input in addition to or instead of touch.

    For
    information about how to support D-pad input in your app, read [Handle controller actions](https://developer.android.com/develop/ui/views/touch-and-input/game-controllers/controller-input). If
    your app absolutely can't function without a touchscreen, then instead use the [`<uses-feature>`](https://developer.android.com/guide/topics/manifest/uses-feature-element) tag to
    declare the required touchscreen type, ranging from `"android.hardware.faketouch"` for basic
    touch-style events to more advanced touch types such as `"android.hardware.touchscreen.multitouch.jazzhand"` for distinct input from multiple fingers.

attributes:
:

    `android:reqFiveWayNav`
    :   Whether the application requires a five-way navigation control. It's
        `"true"` if it does, and `"false"` if not. A five-way
        control is one that can move the selection up, down, right, or left, and
        also provides a way of invoking the current selection. It can be a
        directional pad (D-pad), trackball, or other device.


        If an application requires a directional control, but not a control of a
        particular type, it can set this attribute to `"true"` and ignore
        the [reqNavigation](https://developer.android.com/guide/topics/manifest/uses-configuration-element#nav) attribute. However,
        if it requires a particular type of directional control, it can ignore
        this attribute and set `reqNavigation` instead.

    `android:reqHardKeyboard`
    :   Whether the application requires a hardware keyboard. It's
        `"true"` if it does, and `"false"` if not.

    `android:reqKeyboardType`
    :   The type of keyboard the application requires, if any.
        This attribute doesn't distinguish between hardware and software
        keyboards. If a hardware keyboard of a certain type is required,
        specify the type here and also set the `reqHardKeyboard` attribute
        to `"true"`.


        The value must be one of the following strings:


        | Value | Description |
        |---|---|
        | "`undefined`" | The application doesn't require a keyboard. A keyboard requirement isn't defined. This is the default value. |
        | "`nokeys`" | The application doesn't require a keyboard. |
        | "`qwerty`" | The application requires a standard QWERTY keyboard. |
        | "`twelvekey`" | The application requires a twelve-key keypad, like those on most phones, with keys for the digits from `0` through `9`, plus star (`*`) and pound (`#`) keys. |

    `android:reqNavigation`
    :   The navigation device required by the application, if any. The value
        must be one of the following strings:

        | Value | Description |
        |---|---|
        | "`undefined`" | The application doesn't require any type of navigation control. The navigation requirement isn't defined. This is the default value. |
        | "`nonav`" | The application doesn't require a navigation control. |
        | "`dpad`" | The application requires a D-pad for navigation. |
        | "`trackball`" | The application requires a trackball for navigation. |
        | "`wheel`" | The application requires a navigation wheel. |


        If an application requires a navigational control, but the exact type of
        control doesn't matter, it can set the
        [reqFiveWayNav](https://developer.android.com/guide/topics/manifest/uses-configuration-element#five) attribute to `"true"`
        rather than setting this one.

    `android:reqTouchScreen`
    :   The type of touch screen the application requires, if any.
        The value must be one of the following strings:

        | Value | Description |
        |---|---|
        | "`undefined`" | The application doesn't require a touch screen. The touch screen requirement is undefined. This is the default value. |
        | "`notouch`" | The application doesn't require a touch screen. |
        | "`stylus`" | The application requires a touch screen that is operated with a stylus. |
        | "`finger`" | The application requires a touch screen that is operated with a finger. **Note:** If some type of touch input is required for your app, instead use the [`<uses-feature>`](https://developer.android.com/guide/topics/manifest/uses-feature-element) tag to declare the required touchscreen type, beginning with `"android.hardware.faketouch"` for basic touch-style events. |

introduced in:
:   API level 3

see also:
:
    - [configChanges](https://developer.android.com/guide/topics/manifest/activity-element#config) attribute of the [<activity>](https://developer.android.com/guide/topics/manifest/activity-element) element
    - [ConfigurationInfo](https://developer.android.com/reference/android/content/pm/ConfigurationInfo)