it-swarm.com.ru

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

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

        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

14
MacaronLover

См. Выберите ресурсы для публикации по причине.

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

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

12
lazybug

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

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);
13
Freisturz

Похоже, что это ошибка в Android Это сообщение от участника проекта в Android Open Source Project - Issue Tracker

Отвечая на подобное Проблема

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

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

Я рассматриваю два варианта исправления: 

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

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

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

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

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

    Android {
        lintOptions {
            disable 'PrivateResource'
        } 
    }

они говорят, что это было исправлено, но я пробежал эту проблему сегодня, и я использую Android Studio 1.5.1 и Gradle 1.5

2
Mohammad

Хотя я предпочитаю, чтобы подавления 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 также автоматически заполнит это поле для вас.

0
fejd