2010-06-21 6 views
3

나는 styles.xml 내 오브젝트 (객체가 신경 쓸 것)의 describef 특성을했습니다. styles.xml에서 이러한 속성을 동적으로 변경하고 싶습니다.안드로이드 변화 스타일의 동적

사람이 내가 그렇게 할 수있는 방법을 알고 있나요?

답변

2

나는이 질문에 대한 답변을 모순보고하고있다. 여기에 yes이라고 표시되어 있지만 여기에는 no이 표시됩니다. 보기에 대한 안드로이드 워드 프로세서를보고 어떤 setStyle 메서드를 찾을 수 없습니다.

+0

) (어떤'의 setStyle이없는 합의' 방법.런타임에 스타일을 변경할 수있는 방법이 없다는 것을 알고 있습니다. 런타임에 스타일에 의해 설정된 대부분의 속성을 변경할 수 있지만 속성별로 속성을 수행해야합니다. – CommonsWare

0

이 속성을 dinamically styles.xml에서 변경하고 싶습니다.

정확히 변경 원하는 작업

? 런타임에 적용된 스타일?

내가

TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes) 

를 사용하여 코드에서이 작업을 수행 할 수 있습니다 생각하고는 여기가 (나에게)이이 XML의 인플레이터가 제공 한 것입니다 무엇 때문에

  1. AttributeSet set = null; 것으로 보인다.

  2. int[] attrs = R.styleable.MyWidget; 내가보고 싶지 속성을 정의합니다. MyWidget의 스타일에 내 테마에 정의 된 참조를,이다

  3. int defStyleAttr = myWidgetStyle;. 이들은 res/values의 XML 파일에 모두 정의됩니다. "myWidgetStyle"은 안드로이드 개발자가 코드에서 사용한 이름 패턴을 따릅니다.

  4. defStyleRes = 0; 나는 이것에 관해 생각할 필요가 없길 바래.

그런 다음

Color color = a.getColor(R.styleable.MyWidget_background, R.color.my_default); 
a.recycle(); 

이 어쨌든 - 그래서 지금까지 제대로 작동 않는, 그런 배경 색상으로, 모든 속성을 얻을 수 있습니다.

안드로이드 빌드 시스템은 a.getColor에서 사용할 올바른 색인을 편리하게 생성하고 R.styleable.MyWidget_background라고 이름을 붙인 것처럼 보입니다. 나는이 이름을 만들지 않았기 때문에 안드로이드는 스타일리쉬 한 MyWidget을 위해 XML을 사용하여이를 수행해야만한다.

TypedArray에서 필수 속성을 검색하여 올바른 색인을 조회 할 수는 있지만 비효율적이며 TypedArray는 처리하기에 불쾌한 장치처럼 보일 것으로 예상됩니다. 나는 그것을 길게하기 위해 매우 긴 막대기를 사용할 것입니다!

당신이 할 수있는
6

같은 :

활동에

:

styles.xml에서
this.setTheme(R.style.ThemeRed); 

:

<resources> 
    <style name="ThemeBlack" parent="@android:style/Theme"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:typeface">sans</item> 
    <<item name="android:background">#999999</item> 
    <item name="android:textSize">16sp</item> 
    </style> 
    <style name="ThemeRed" parent="@android:style/Theme"> 
    <item name="android:textColor">#FFFFFF</item> 
    <item name="android:typeface">sans</item> 
    <item name="android:background">#c81111</item> 
    <item name="android:textSize">16sp</item> 
    </style> 
</resources> 
+0

이것은 흥미 롭지 만 _current_ _ACTIVITY_의 모든 하위보기에 대해 설명 된 속성을 변경합니다 (그러나 특정보기에만 필요함). – davs

+0

+1, 매우 도움이됩니다. – marlar