Почему ресурсы платформы API 28 недоступны? - PullRequest
0 голосов
/ 03 октября 2019

TL; DR:

Эта строка компилируется:

int resid = android.R.layout.preference_category;

Но эта строка не:

int resid = android.R.layout.preference;

Ошибкаmsgstr "невозможно найти настройку символьной переменной". Но оба ресурса явно доступны в каталоге Sdk\platforms\android-28\data\res\layout!

Почему это происходит?

Фон

Я могу перейти (в IDE) к ресурсу preference_category, и, конечно же,Рядом с ним находится макет preference.xml, а также около тысячи других макетов, которые, аналогично, не будут компилироваться.

Мой build.gradle (отрывок):

compileSdkVersion 28

defaultConfig {
    minSdkVersion 18
    targetSdkVersion 26
}

Я недавнопереключил мое приложение на AndroidX. По большей части все прошло гладко, за исключением того, что я заметил, что в моих предпочтениях появились новые визуальные стили. Мне было бы все равно, за исключением того, что я «подклассил» preference.xml, скопировав исходный макет Android, сделав тривиальное изменение, а затем указав этот макет в моем prefs.xml, например:

...
<androidx.preference.CheckBoxPreference
    android:key="@string/pref_audio"
    android:title="Audio"
    android:defaultValue="false"
    android:layout="@layout/my_custom_preference"
    />
...

Предпочтения, которые я обработал таким образом, по-прежнему выглядят так, как раньше - то, как они выглядели до Я переключился на AndroidX. Но все остальные настройки теперь выглядят кардинально иначе.

Я вернулся в папку API уровня 28 и проверил содержимое оригинального Android preference.xml, чтобы посмотреть, изменилось ли оно (поскольку я изначально копировал / помещал в подклассы). Это). Это не имеет! Тем не менее, стили предпочтений изменились.

Чтобы устранить неполадки, я попытался проверить, что android.R.layout.preference действительно указывает на ресурс, который я просматривал, что привело меня к вышеупомянутой ошибке компиляции.

1 Ответ

1 голос
/ 03 октября 2019

Только не используйте настройки фреймворка (включая ресурс android.R.layout.preference_category), но androidx.preference . Также имеется новый PreferenceManager , который следует использовать вместо него. Смешивание android.preference с androidx.preference может привести к неожиданным результатам. После публикации одного пользовательского PreferenceCompatActivity , который может быть подходящей отправной точкой.

...