2015-05-13 23 views
7

Bir ana uygulama modülünün yanı sıra birkaç kitaplık modülüne sahibim.Android Studio'daki diğer modüllerden referans kaynakları

Kitaplığım modülüm kaynakları Ana Uygulama modülünden nasıl referans alabilir.

Örneğin: Temel uygulamamda, mavi olan "AppPrimary" adlı bir renk öğesine sahip olan colors.xml vardır.

Kitaplığımda @ color/AppPrimary rengine başvurmak için xml düzeninde bir görünüm istiyorum, ancak bu çalışmaz.

Bunu nasıl başarabilirim?

Düzenleme: Bunu özellikle appCompat kaynakları değil belirtmeliyim. Ana modülümde sadece genel dizeler/renkler/stiller /. Onları aynı projede nasıl color.xml/strings.xml kitaplık modülümde kullanabilirim? xml düzenini referans ?attr/colorPrimary yerine @color/AppPrimary

içinde kütüphane modülünde

cevap

7

Bu renk paleti uygulamanızın temasından niteliklerini başvurur. yani .; böylece

<item name="colorPrimaryDark">...</item> -> ?attr/colorPrimaryDark 
<item name="colorAccent">...</item> -> ?attr/colorAccent 

ve: Ayrıca diğer renk paletine başvurabilir

<item name="colorPrimary">@color/AppPrimary</item> 

gibi bağlıyor.

Please refer to this documentation

Ikaz:
Bu örnekler tema AppCompat uygulanmasını ifade eder. yani android: ad alanı öneki yok.

- DÜZENLEME -

Kısa cevap basitçe kütüphaneleri dosyasını colors.xml için başvurulan ana modülden tanımlanmış bir renk 'get' olamaz olmasıdır.

Bununla birlikte, aynı efekti elde etmek için temanızdaki özel tanımlı özellikleri kullanabilirsiniz.

Bu kitaplık modülünde sizin attrs.xml dosyada, böyle bir şey genel bir styleable bildirerek çalışır

:

<declare-styleable name="BaseTheme"> 
    <attr name="someColor" format="reference|color" /> 
</declare-styleable> 

Not: styleable adını bu yüzden adının çekinmeyin Bu uygulama ile bir ilgisi yoktur ne istersen onu.

Ardından 'style.xml' veya 'theme.xml' dosyasında ana modülün teması tanımında böyle, paylaşmak istediğiniz renge bu özniteliği ayarlamak istersiniz:

<style name="Theme.Example" parent="Theme.AppCompat.Light.NoActionBar"> 

    <!-- Color Palette --> 
    <item name="colorPrimary">...</item> 
    <item name="colorPrimaryDark">...</item> 
    <item name="colorAccent">...</item> 

    <!-- Here we define our custom attributes --> 
    <item name="someColor">@color/dark_blue</item> 

</style> 

Bu bir kez tanımlandığında, kitaplık modülünüzün XML kodundaki özniteliğe başvurabilirsiniz. Örneğin.;

<TextView 
    ... 
    android:textColor="?attr/someColor" 
    /> 
+0

Bunların nessicarily appcompat kaynakları olmadığını belirtmeliyim. Sadece "dark_blue" adlı ana uygulama modülünde tanımlanan genel bir renk söyle. Kütüphane colors.xml'imdeki bu dark_blue rengini nasıl alabilirim? – AnnonAshera

+0

Kullanım durumunuzu daha iyi kullanabilmek için cevabı güncelledim. – r0adkll

+0

Teşekkürler r0adkl Proje yapısını değiştirdim. Bunun yerine, tüm modüllerin (kütüphaneler ve temel uygulama) uygulama renkleri/ortak dizgilerle referans gösterebileceği ortak bir çekirdek kitaplığı tanımladım. – AnnonAshera

0

Kitaplık modülünde programsal olarak renk özelliklerini nasıl alacağınızı buradan öğrenebilirsiniz.

@ColorInt 
public static int getAttributeColor(Context context, @AttrRes int colorAttribute) 
{ 
    int[] attrs = {colorAttribute}; 
    TypedArray ta = context.obtainStyledAttributes(attrs); 
    /*Get the color resourceID that we want (the first index, and only item, in the 
    attrs array). Use ContextCompat to get the color according to the theme. 
    */ 
    @ColorInt int color = ContextCompat.getColor(context, 
               ta.getResourceId(0, -1)); 
    // ALWAYS call recycle() on the TypedArray when you’re done. 
    ta.recycle(); 
    return color; 
} 

Ex.

//Get the main applications ‘colorAccent' from the app’s color palette. 
int appAccentColor = Utility.getMarketAttributeColor(context, R.attr.colorAccent); 

//Get the color attribute your module made for the client app to define. 
int moduleAttrColor = Utility.getMarketAttributeColor(context, R.attr.moduleColorAttr); 

Not: Bu temel özellik alma işlemi en nitelik türleri için de geçerlidir.

İlgili konular