是否可以创建Theme
而不是预编译有限数量的主题(意味着操作系统提供的主题和资源 xml)?该主题将根据用户配置在应用程序启动期间应用(值在运行时发生变化,但在创建样式化活动之前,值来自大范围的 http 服务,而不是一组)。
欢迎任何其他解决方案,直到它需要在任何地方使用自定义的 View 类。
我现在需要的是设置全局默认 TextView 文本颜色,当然我不想到处使用子类,我认为失去优化不会造成巨大的灾难,或者至少看到性能差异会很棒.
是否可以创建Theme
而不是预编译有限数量的主题(意味着操作系统提供的主题和资源 xml)?该主题将根据用户配置在应用程序启动期间应用(值在运行时发生变化,但在创建样式化活动之前,值来自大范围的 http 服务,而不是一组)。
欢迎任何其他解决方案,直到它需要在任何地方使用自定义的 View 类。
我现在需要的是设置全局默认 TextView 文本颜色,当然我不想到处使用子类,我认为失去优化不会造成巨大的灾难,或者至少看到性能差异会很棒.
在您的 Activity 中覆盖ContextThemeWrapper.getTheme(),并提供您自己的Theme。
或者在调用 super.onCreate 之前在 Activity.onCreate 中应用预定义的主题,提供自己的主题资源 id:
@Override
public void onCreate(Bundle si){
setTheme(R.style.MyTheme);
super.onCreate(si);
}
在 xml 样式文件中使用主题是首选。您可以继承一些系统主题,并仅覆盖所需的属性。您的 style.xml 示例:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="MyTheme" parent="android:Theme.Holo">
<item name="android:textColorPrimary">#0f0</item>
</style>
</resources>
样式和主题很强大,但是缺乏深入的文档,也没有高级工具。
好吧,这可能有点太老套了,但这里有一个镜头。
public class BaseActivity extends Activity{
@Override
public void onResume() {
ViewGroup root = ((ViewGroup)findViewById(android.R.id.content));
applyTheme(root);
}
private void applyTheme(View view){
if (view instanceof ViewGroup && ((ViewGroup) view).getChildCount() !=0){
for (int i = 0; i< ((ViewGroup) view).getChildCount(); i++){
applyTheme(((ViewGroup) view).getChildAt(i));
}
} else {
if (view instanceof TextView){
((TextView) view).setTextColor(your_color_from_server_here);
}
}
}
}
并让您的所有活动都扩展 BaseActivity。