2013-03-27 10 views
20

Zastanawiam się raz po raz, czy jest jakiś sposób zdefiniowania kolorów w colors.xml przez odniesienie do innego koloru, który został zdefiniowany. Cóż, próbowałem go i rzeczywiście wygląda na to, że możesz odwoływać się do innych kolorów używając @ color/XXX.Android - definiowanie kolorów poprzez odwoływanie się do innych zdefiniowanych kolorów

na przykład czyjeś colors.xml mógłby wyglądać następująco:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    … 
    <color name="primary_blue">#205081</color> 
    <color name="action_bar_text">@color/primary_blue</color> 
    … 
</resources> 

Ale nie chcesz, aby inni używać primary_blue definicję bezpośrednio - to nie ma sensu, aby coś niebieskiego bez kontekstu. Najlepszym rozwiązaniem, które wymyśliłem, jest przedrostek "bezpośrednich" kolorów, takich jak primary_blue, a następnie skomentuj, że nie powinny być używane bezpośrednio.

Czy istnieje sposób, aby uniemożliwić korzystanie z tych kolorów bezpośrednich, a jednocześnie pozwala mi mój plik colors.xml odwoływać się do nich? Myślę, że może style lub apklib mogą mi pomóc.

+0

Jeśli masz zamiar użyć tego samego koloru w innej sytuacji niż "kontekst", nie ma to żadnego sensu. Także jeśli action_bar_color jest dostępny, będzie to kolor primary_blue. – Luksprog

+0

Byłoby to bardzo przydatne, ponieważ wymusza dobre praktyki kodowania. Szkoda, że ​​nie ma sposobu na ukrycie przestrzeni nazw w xml. –

Odpowiedz

1

Dodanie odpowiedzi tutaj, na wypadek gdyby ktoś w przyszłości przeszedł przez to.

Podczas tworzenia biblioteki Androida można mark resources as public. Wszelkie zasoby, których nie ma w pliku public.xml, są traktowane jako prywatne.

Pośrednio czyni atrybuty prywatny nie tylko uniemożliwia użytkownikom biblioteki z przeżywa kodu sugestie uzupełniania z zasobów bibliotecznych wewnętrznych, ale również pozwala na zmianę nazwy lub usunięcie zasobów prywatnych bez zerwania klientów z biblioteki. Zasoby prywatne są filtrowane po uzupełnieniu kodu i edytorze kompozycji, a Lint ostrzega, gdy próbujesz odwołać się do zasobu prywatnego.