Встроенная проверка версии SDK в Android XML? - PullRequest
1 голос
/ 16 марта 2019

Иногда, когда я хочу добавить функцию SDK 21+ в свой макет, мне нужно создать весь макет в другом файле.Это тяжело для меня, потому что я хочу сделать или проверить все в одном макете.Больше макетов выглядят сложными и сложными в управлении.Вместо двух макетов для разных версий SDK, я могу сделать что-то вроде этого:

<ImageView
    android:id="@+id/x"
    android:layout_width="16dp"
    android:layout_height="wrap_content"
    <compatibility sdk_higher_than="21">
        android:elevation="xdp" //my problem not about the elevation. Its just an example that pops in my mind about the compatibility.
    </compatibility>
    app:srcCompat="@drawable/ic_x" />

Я могу сделать это программно, но когда я должен сразу увидеть представление в конструкторе, сделать это программно не очень хорошо.путь для меня.Если есть хорошая практика или идея для этой проблемы, кто-нибудь может осветить меня?

Ответы [ 2 ]

0 голосов
/ 16 марта 2019

Да, вы можете сделать это, добавив инструмент назначения API :

Первое добавление: <RootTag xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" >

Пример:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    tools:targetApi="14" >

или по имени: tools:targetApi="jelly_bean"

Если вы хотите, чтобы ваши макеты использовались в разных версиях, назовите ваши файлы как:

/res/layout/layout.xml - (default directries)

/res/layout-v14/layout.xml

/res/layout-v17/layout.xml

Также, если вы хотите динамически создать элемент в вашем коде:

Вы также можете использовать аннотации в своем коде Java, чтобы упростить задачу:

Первый импорт: import android.annotation.TargetApi;

Затем используйте эту аннотацию над вашим методом:

@TargetApi(Build.VERSION_CODES.HONEYCOMB)

Есть еще аннотации, по которым вы можете получить помощь:

@RequiresApi(Build.VERSION_CODES.LOLLIPOP)

Над аннотацией для предупреждения о методах, которые используются более низкого уровня API. Подробнее о requiresApi: Аннотация уровня API для библиотек Android

Теперь внутри вашего метода вы можете динамически генерировать представления.

Пример из doc :

private void setUpActionBar() {
    // Make sure we're running on Honeycomb or higher to use ActionBar APIs
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayHomeAsUpEnabled(true);
    }
}

Прочтите документ для получения более подробной информации об аннотациях: https://developer.android.com/studio/write/annotations

0 голосов
/ 16 марта 2019

Вы не можете указать угол обзора в своем XML-коде и проверить версию SDK в своем коде - если он старше 21, укажите программный угол обзора.

Например:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
    //the API level is above 21 and you can manipulate your view with all the features that available to API level 21+
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...