Подтвердить что ты не робот

Помечается как личное предупреждение после изменения цвета стрелки вверх

После определения пользовательского цвета для стрелки назад в панели действий, возвращается предупреждение. Что можно сделать, чтобы избавиться от этого предупреждения?

        final Drawable upArrow = ContextCompat.getDrawable(this, R.drawable.abc_ic_ab_back_mtrl_am_alpha);
        upArrow.setColorFilter(Color.BLUE, PorterDuff.Mode.SRC_ATOP);
        actionBar.setHomeAsUpIndicator(upArrow);

Ресурс @drawable/abc_ic_ab_back_mtrl_am_alpha помечен как закрытый в com.android.support:appcompat-v7

4b9b3361

Ответ 1

См. Выбор ресурсов, чтобы обнародовать причину.

Короче говоря, drawable/abc_ic_ab_back_mtrl_am_alpha является частным ресурсом appcompat-v7 и предназначен для использования только этой библиотекой. Вы не должны использовать это.

Если вы действительно хотите использовать его, скопируйте его в свой проект

Ответ 2

Вместо того, чтобы делать

Мохаммада,
android {
    lintOptions {
        disable 'PrivateResource'
    } 
}

Я бы рекомендовал сделать следующее, что является локальным исправлением для оператора. Преимущество состоит в том, что вам не нужно деактивировать контрольные точки во всем мире (что можно легко забыть снова активировать позже).

Для XML:

tools:ignore="PrivateResource"

Для кода:

@SuppressLint("PrivateResource")

Эффективно, тогда ваш код должен выглядеть примерно так:

XML:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:icon="@drawable/abc_ic_search_api_mtrl_alpha"
    tools:ignore="PrivateResource" />

код:

@SuppressLint("PrivateResource")
final Drawable upArrow = ContextCompat.getDrawable(context, R.drawable.abc_ic_ab_back_mtrl_am_alpha);

Ответ 3

Кажется, это ошибка в android этот пост формирует участника проекта в Android Open Source Project - Issue Tracker

Ответ на аналогичный Issue

Основной причиной здесь является то, что когда библиотека зависит от другой библиотеки, он импортирует все ресурсы из любых библиотек, от которых он зависит. собственный объявленный R.txt(в файле AAR).

Однако он не включает объявление public.txt из этих зависимостей, так что теперь оно заканчивается обнажением этих символов, как объявлено, но не публично. частный.

Я рассматриваю два альтернативных решения:

(1) в поиске видимости ресурсов для библиотеки, удалите все символы, импортированные из зависимости (независимо от того, зависит ли эта зависимость предоставляет информацию о видимости) или

(2) отмените логику поиска видимости: если мы найдем символ как открытый в любой библиотеке, считайте это публичной, а не текущей логикой, которая говорит, что если символ объявлен как частный в любом месте, это так.

Думаю, я пойду с 2; текущая логика не имеет смысла, когда учитывая сценарий, в котором символы заканчиваются в нисходящем потоке библиотеки.

как они сказали:

Единственным обходным решением на данный момент является отключить личный ресурс lint проверьте:

    android {
        lintOptions {
            disable 'PrivateResource'
        } 
    }

они говорят, что он был исправлен, но сегодня я столкнулся с этой проблемой, и я использую android studio 1.5.1 и gradle 1.5

Ответ 4

Хотя я предпочитаю, чтобы подавления Lint были как можно ближе к источнику, как это было сделано в этом ответе, но если это не сработает, можно также перечислить подавления в файле lint.xml расположенном в папке вашего app. Это будет выглядеть примерно так:

<?xml version="1.0" encoding="UTF-8"?>
<lint>
<issue id="<issue-id>">
    <ignore path="<path-to-source>.<file-extension>"/>
</issue>

Где Issue-ID - это тип, который вы хотите подавить, например UseSparseArrays. Android Studio также автоматически заполнит это поле для вас.