У меня странный на этот раз ... Я использую для ящика Vector Drawables (впервые). Я установил в build.gradle
, что я хотел бы использовать библиотеку поддержки для отображения моих векторов. В зависимости от уровня API значки теперь меняют свой цвет. В Android-Studio превью все нормально и черное, как и должно быть.
Я прочитал Учебное пособие на developers.android.com и Учебное пособие на thefuntasty.com . И советы и подсказки не помогли.
На первом рисунке показан ящик с уровнем API 24, а второй - с уровнем API 27. На уровне API 23 то же самое произошло. Мой реальный телефон (Huawei P9 plus) с Android 7.0 отображает значки белого цвета.
Соответствующие build.gradle
части:
android {
compileSdkVersion 26
buildToolsVersion '27.0.3'
defaultConfig {
applicationId "..."
minSdkVersion 24
targetSdkVersion 26 // An internal room component does depend on it, so I must not change it.
...
// User added
vectorDrawables.useSupportLibrary = true
}
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
api 'com.android.support:appcompat-v7:26.1.0'
api 'com.android.support:design:26.1.0'
api 'com.android.support:support-vector-drawable:26.1.0'
api 'com.google.android.gms:play-services-maps:15.0.1'
... (Room & other components)
}
Также здесь код для одного из векторов:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:autoMirrored="true"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M10,20v-6h4v6h5v-8h3L12,3 2,12h3v8z" />
</vector>
На него есть ссылка в файле макета ящика:
<item
android:id="@+id/nav_main"
android:icon="@drawable/ic_home_black_24dp"
android:title="@string/nav_bar_reverse_wherigos"
android:tint="@color/text_color_primary" />
EDIT:
Я посмотрел глубже в проблеме. Теперь я могу сказать, что значение navigationView.getItemIconTintList().getDefaultColor()
отличается в API 24 и 27. Мой вопрос решается, когда я понимаю, почему это так, чтобы я мог внести соответствующие изменения в свой макет ...
РЕДАКТИРОВАТЬ 2:
Я могу переопределить цвет на всех уровнях API с помощью app:itemIconTint="#000000"
или navigationView.setItemIconTintList(null);
, но тогда значок всегда черный, а не синий при выборе (как на картинке). Также меня очень сильно интересует, почему значение по умолчанию меняется с уровнями API.