나는 styles.xml 내 오브젝트 (객체가 신경 쓸 것)의 describef 특성을했습니다. styles.xml에서 이러한 속성을 동적으로 변경하고 싶습니다.안드로이드 변화 스타일의 동적
사람이 내가 그렇게 할 수있는 방법을 알고 있나요?
나는 styles.xml 내 오브젝트 (객체가 신경 쓸 것)의 describef 특성을했습니다. styles.xml에서 이러한 속성을 동적으로 변경하고 싶습니다.안드로이드 변화 스타일의 동적
사람이 내가 그렇게 할 수있는 방법을 알고 있나요?
정확히 변경 원하는 작업이 속성을 dinamically styles.xml에서 변경하고 싶습니다.
? 런타임에 적용된 스타일?
내가
TypedArray a = context.obtainStyledAttributes(AttributeSet set, int[] attrs, int defStyleAttr, int defStyleRes)
를 사용하여 코드에서이 작업을 수행 할 수 있습니다 생각하고는 여기가 (나에게)이이 XML의 인플레이터가 제공 한 것입니다 무엇 때문에
AttributeSet set = null;
것으로 보인다.
int[] attrs = R.styleable.MyWidget;
내가보고 싶지 속성을 정의합니다. MyWidget의 스타일에 내 테마에 정의 된 참조를,이다
int defStyleAttr = myWidgetStyle;
. 이들은 res/values의 XML 파일에 모두 정의됩니다. "myWidgetStyle"은 안드로이드 개발자가 코드에서 사용한 이름 패턴을 따릅니다.
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는 처리하기에 불쾌한 장치처럼 보일 것으로 예상됩니다. 나는 그것을 길게하기 위해 매우 긴 막대기를 사용할 것입니다!
돈
당신이 할 수있는같은 :
활동에:
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>
) (어떤'의 setStyle이없는 합의' 방법.런타임에 스타일을 변경할 수있는 방법이 없다는 것을 알고 있습니다. 런타임에 스타일에 의해 설정된 대부분의 속성을 변경할 수 있지만 속성별로 속성을 수행해야합니다. – CommonsWare