2011-10-03 8 views
9

Jak zdefiniować prosty kształt wielokrotnego użytku (lub gradient lub narożniki) w XML?Definiowanie rodzica XML Style gradientu/kształtu/narożników

Mam kilkanaście rozkładanych gradientów, które będą takie same, jak kolory początkowe i końcowe. Miałem nadzieję, że zdefiniuję identyczne rzeczy gdzie indziej i będę mieć plik XML dla każdego gradientu, który definiuje tylko kolory początkowy i końcowy. Czy to jest możliwe?

Jest to podstawa:

<?xml version="1.0" encoding="utf-8"?> 
<shape xmlns:android="http://schemas.android.com/apk/res/android" 
     android:shape="rectangle"> 
    <gradient xmlns:android="http://schemas.android.com/apk/res/android" 
     android:type="linear" 
     android:angle="270" 
    android:startColor="#e1ffffff" 
    android:endColor="#e100ff00"> 

    <stroke android:width="1dp" 
      android:color="#ff000000" /> 

    <corners android:radius="4dp" /> 
</gradient> 
</shape> 

Potem chciałem zastąpić startColor i endColor (a może też promień naroża lub inna własność) w pliku XML za każdym rozciągliwej.

Próbowałem używać zarówno rodzica, jak i stylów, ale żadne z nich nie używa żadnej z właściwości. Na przykład:

<style name="base_gradient"> 
    <item name="android:angle">270</item> 
    <item name="android:type">linear</item> 
    <item name="android:startColor">#e1ffffff</item> 
    <item name="android:endColor">#e100ff00</item> 
</style> 

a następnie rozciągliwej wygląda następująco:

<gradient style="@style/base_gradient" /> 

To nie działa. Próbowałem podobnie oddanie wyżej w oddzielnym pliku XML, a następnie robi to dla siebie odkształcalne:

<gradient parent="@drawable/base_gradient" /> 

To nie działało.

Czy istnieje sposób, aby to zrobić?

Odpowiedz

7

Niestety nie sądzę, że jest to możliwe. Próbowałem zrobić to samo i nie mogłem znaleźć rozwiązania.

To, co chciałbym zasugerować, to umieszczenie wszystkich wartości w plikach xml zasobów. W moim przypadku zdecydowałem się umieścić moje wymiary w dimens.xml, & integers.xml i kolory w colours.xml (choć mogło być połączone w jeden plik)

Gdy skończyło się z rozciągliwej shapefile dla każdego kolor, przynajmniej jeśli chcę poprawić kolory lub dopełnienie itp., muszę tylko edytować plik colours.xml plik integers.xml lub dimens.xml.

Jeden z moich kształt rozciągliwej wtedy wyglądał tak:

<?xml version="1.0" encoding="UTF-8"?> 

<shape 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:shape="rectangle" > 

    <corners 
     android:radius = "@dimen/radius_corner" /> 

    <!-- end colour at top, start colour at bottom --> 
    <gradient 
     android:angle="@integer/gradient_angle_default" 
     android:endColor="@color/white" 
     android:startColor="@color/pink_pale"/> 

    <padding 
     android:left = "@dimen/my_padding" 
     android:right = "@dimen/my_padding" 
     android:bottom = "@dimen/my_padding" 
     android:top = "@dimen/my_padding" /> 

</shape> 

zasobów łącza pliku: http://developer.android.com/guide/topics/resources/more-resources.html

nadzieję, że to pomaga.