2011-01-28 33 views
8

Kendilerine önceden hazırlanmış "android:" isimleri olan temaları geçersiz kılabiliyorum, ancak Android themes.xml ayrıca geçersiz kılınmayan özelliklere de dikkat çekiyor. Örneğin:Varsayılan Android temalarını geçersiz kılın

<!-- Variation on the Light theme that turns off the title --> 
<style name="Theme.Codebase" parent="android:style/Theme.Light"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="colorBackground">@color/off_white</item> 
</style> 

colorBackground Theme.Light xml tanımlanan, ama burada bu ekleyerek bana

/res/values/styles.xml:10: error: Error: No resource found that matches the given name: attr 'colorBackground'. 

hata verir. Uygulama için bir bütün olarak bu stili nasıl geçersiz kılabilirim?

+0

Android olmadan bu etiketler: android kaynağındaki aynı res/values ​​klasöründe attr xml dosyaları içinde tanımlanmış gibi görünüyor. http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res/values;hb=HEAD attrs.xml dosyasına bakın ve attrs_manifest.xml I ya xmlns kullanarak bunları bir şekilde almanız veya değerler klasörünüze benzer dosyaları eklemeniz gerektiğini düşünüyorum, ancak emin olmak için xml hakkında yeterli bilgi sahibi değilim. – Jems

cevap

8

Standart üzerine yazabilirsiniz aynen böyle android: öneki eklemeyi unutmayın, siz windowNoTitle gibi özelliklere modifiye aynı şekilde bağlıyor: attr öneki olmadan

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="SEclubTheme" parent="@android:style/Theme"> 
     <item name="android:colorForeground">@color/bright_foreground_dark</item> 
     <item name="android:colorBackground">@color/background_dark</item> 
    </style> 
</resources> 
+0

Evet, bunu çözdüm. "ColorBackground" un kendi temalarında kendi başına nasıl çalıştığı konusunda hala şaşkınım. Herhangi bir fikir? Şimdilik en iyi cevap! – typeoneerror

+0

Bunu söyleyebilirim. Görünümlerin her zaman düz bir arka plan üzerinde çizildiği varsayımına dayanarak bazı optimizasyonlar gerçekleştirmek için "ListView" stillerinde kullanılan "colorBackgroundCacheHint" parametresini tanımlar. Bununla birlikte, bu özellik için hiç bir faydası yok gibi görünüyor. Daha önemlisi, adından da anlaşılacağı gibi pencere arka planını tanımlayan 'windowBackground' özniteliğidir. – Malcolm

3

, senin colorBackground bir öznitelik olur sana tanımlamak gerekir. Bu örnekte

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 
    <ImageView 
     android:id="@+id/imageView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:src="?attr/theme_dependent_icon" /> 
</LinearLayout> 

, kullandığım çünkü özel tema adlarıyla MyDarkTheme: Eğer main_activity.xml yılında ?attr/theme_dependent_icon aracılığıyla özelliğini kullanabilirsiniz, Sonra

<resources xmlns:android="http://schemas.android.com/apk/res/android"> 
    <declare-styleable name="custom_menu"> 
      <attr name="theme_dependent_icon" format="reference"/> 
    </declare-styleable> 
    <style name="MyDarkTheme" parent="android:Theme" > 
     <item name="theme_dependent_icon">@drawable/ic_search_dark</item> 
    </style> 
    <style name="MyLightTheme" parent="android:Theme.Light" > 
     <item name="theme_dependent_icon">@drawable/ic_search_light</item> 
    </style> 
</resources> 

: theme_dependent_icon bir styles.xml tanımlanır Aşağıdaki örneği inceleyin ve MyLightTheme, setContentView'dan önce ana faaliyetinizin onCreate sırasında, yani

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setTheme(R.style.MyDarkTheme); // causes ic_search_dark.png to be shown 
    // setTheme(R.style.MyLightTheme); // causes ic_search_light.png to be shown 
    setContentView(R.layout.main_activity); 
} 

Arama ayarıTheme(), çalışma zamanı sırasında bir temayı seçmenin bir yoludur. Başka bir yol ise, values, values-11, , values-14 standartlarına uygun, 1.styles.xml'un çeşitli sürümlerini, Android 3.0 (API-11) teması ve Android 4.0 (API-14) temasıyla ilişkilendirmektir.

İlgili konular