2011-01-28 5 views
8

이름 앞에 "android :"가 붙은 테마를 덮어 쓸 수 있었지만 Android themes.xml은 덮어 쓸 수없는 것으로 보이는 속성도 정의합니다. 예를 들어 :기본 Android 테마 덮어 쓰기

<!-- 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의 정의,하지만 여기를 추가하면 나에게

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

오류를 제공한다. 애플리케이션의 전체 스타일을 어떻게 재정의합니까?

+0

android :가없는 태그는 안드로이드 소스의 동일한 res/values ​​폴더에있는 attr xml 파일 내에 정의 된 것 같습니다. http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res/values;hb=HEAD attrs.xml 및 attrs_manifest.xml보기 I xmlns를 사용하여 이러한 파일을 가져 오거나 값 폴더에 유사한 파일을 추가해야한다고 생각하지만 xml에 대해 충분히 알지 못합니다. – Jems

답변

8

당신은 표준 덮어 쓸 수 있습니다 그냥 같이 android: 접두사를 추가하는 것을 잊지 마세요, 당신이 windowNoTitle과 같은 속성을 수정 같은 방법으로 속성을 다음 ATTR 접두사없이

<?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

그래, 알아 냈어. 나는 여전히 "colorBackground"가 테마에서 어떻게 작동하는지에 대해 의아해합니다. 어떤 생각? 지금 당장 최상의 답변! – typeoneerror

+0

내가 말할 수있다. 'colorBackgroundCacheHint' 매개 변수를 정의합니다.이 매개 변수는'ListView' 스타일에서 뷰가 항상 단색 배경에 그려지는 가정에 기반하여 몇 가지 최적화를 수행하는 데 사용됩니다. 그 외에도이 속성에는 아무런 용도가없는 것처럼 보입니다. 더 중요한 것은 이름에서 알 수 있듯이 창 배경을 정의하는'windowBackground' 속성입니다. – Malcolm

3

, 당신의 colorBackground는 속성이되는 당신을 정의 할 필요가있다. 이 예에서

<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> 

, 내가 사용하기 때문에 사용자 정의 테마의 이름 MyDarkTheme을 : 당신은 당신의 main_activity.xml?attr/theme_dependent_icon를 통해 속성을 사용할 수 있습니다, 그리고

<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_iconstyles.xml에 정의 된 다음의 예를 고려 MyLightTheme 인 경우 setContentView보다 먼저 주 활동의 onCreate을 선택해야합니다. 즉

@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); 
} 

setTheme() 호출은 런타임 중에 테마를 선택하는 한 가지 방법입니다. 또 다른 방법은 리소스에 styles.xml의 여러 버전을 기본 테마 인 Android 3.0 (API-11) 및 Android 4.0 용 테마 (API-14)에 해당하는 values, values-11, values-14으로 정의하는 것입니다.