亲爱的论友们,在下想要在代码中实现:多个theme在某个项目的所有activity中进行切换。希望大家给些意见,这要如何才能实现啊?

解决方案 »

  1.   

    一套theme一个apk,只是包名不一样(如com.theme1、com.theme2) ,这个theme不要有launcher类 就是不让他有启动类 在主应用中调用图片的地方如似写
    if(1)
    {
    imageView.setBackgroundDrawable(this.createPackageContext("com.theme1", Context.CONTEXT_IGNORE_SECURITY).getResources().getDrawable(R.drawable.icon));
    }
    else if(2)
    {
    imageView.setBackgroundDrawable(this.createPackageContext("com.theme2", Context.CONTEXT_IGNORE_SECURITY).getResources().getDrawable(R.drawable.icon));
    }
      

  2.   

    谢谢你!
    该方法相当于要写多个项目吧?如果这样的话必须先要运行其他项目再运行主项目,那么如何才能实现之际运行主项目就可以运用theme呢?还有个问题就是用该方法不知道如何将这种theme运用到项目的所有activity中。
      

  3.   

    这里可能需要改动系统的framework底层实现了
    我现在正在尝试做如题的改动 
    所有的图片和对应的style还有font信息做为一个主题配置文件来保存和载入 
    需要改动的地方很多
      

  4.   


    嘿嘿,谢谢你!
    在网上也看到很多有关framework,但是我感觉都讲的很是冠冕堂皇,不是怎么的懂,可否给讲讲啊?还有,什么时候做出了RT,可否给个样板,让学习学习啊?
      

  5.   

    亲爱的论友们,如果只是有几张图片资源,想要把他们作为某个activity的background,具体实现要求为:1.在代码中实现
    2.自己可以控制选择哪张图片作为background
    3.当选择了一张图片作为其background之后,当想要选择其他的图片资源时可以自动修改
    总而言之,就是实现类似手机上皮肤切换的效果(只要实现在一个activity中进行切换就可以了)。懂得这方面知识的论论友帮帮忙吧!
      

  6.   

    不需要运行 只需要安装即可 可以在用户选中某个主题时弹出提示“下载此theme”,下载完以后直接弹出安装便可
      

  7.   


    额?我原本是想将theme资源或者图片资源放在项目中,如果像您说的这样的话还得与服务器联系起来啊?
    可不可以不与服务器相连啊?就是直接将资源放在项目中?
      

  8.   

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setTheme(R.style.NewTheme);
    setContentView(R.layout.main);
    }
    <?xml version=”1.0″ encoding=”UTF-8″?>
    <resources>
    <style name=”NewTheme” parent=”android:Theme.Black”>
    <item name=”android:windowNoTitle”>true</item>
    <item name=”android:textColor”>#FFFF0000</item>
    </style>
    </resources>
    <?xml version=”1.0″ encoding=”UTF-8″?>
    <resources>
    <style name=”NewTheme2” parent=”android:Theme.Black”>
    <item name=”android:windowNoTitle”>false</item>
    <item name=”android:textColor”>#FFFF0000</item>
    </style>
    </resources>R.style.NewTheme设置一个全局变量,你看是让文件还是哪保存起来,具体的属性估计你要自己试试。
      

  9.   


    这个全局变量要怎么设置?并且我想要实现的是不同theme之间的切换,看了,还是不懂
      

  10.   

    <?xml version="1.0" encoding="utf-8"?>
    <resources>
    <style name="CustomTheme" parent="android:Theme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:textSize">35sp</item>
    <item name="android:textColor">#823456</item>
    <item name="android:windowBackground">@drawable/logo</item>
    <item name="android:listViewStyle">@style/CustomTheme.ListView</item>
    </style>
    <style name="CustomTheme.ListView" parent="@android:style/Widget.ListView">
    <item name="android:cacheColorHint">#00000000</item>
    </style>
    <style name="CustomTheme2" parent="android:Theme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:textSize">25sp</item>
    <item name="android:textColor">#654321</item>
    <item name="android:listViewStyle">@style/CustomTheme.ListView</item>
    </style>
    </resources>=====================
    public class AsyncListImage extends Activity {
    public static boolean themFlag = false;
      @Override
    public void onCreate(Bundle savedInstanceState) {
    if (!themFlag == true) {
    System.out.println("==a");
    AsyncListImage.this.setTheme(R.style.CustomTheme);
    } else {
    System.out.println("==b");
    AsyncListImage.this.setTheme(R.style.CustomTheme2);
    }
                    super.onCreate(savedInstanceState); setContentView(R.layout.main);                Button btn = (Button) findViewById(R.id.ButtonTopPreUI);
    btn.setOnClickListener(new Button.OnClickListener() { @Override
    public void onClick(View v) {
    if (!themFlag == true) {
    System.out.println("==a");
    AsyncListImage.this.setTheme                 (R.style.CustomTheme);
    } else {
    System.out.println("==b");
    AsyncListImage.this.setTheme(R.style.CustomTheme2);
    }
    themFlag = !themFlag;
    AsyncListImage.this.onCreate(null);
      } });
    .................
    .................
    setTheme方法必须在setContentView()之前才会起作用,所有以才AsyncListImage.this.onCreate(null);
    写了下