当前位置:   article > 正文

Android 反射实战 - 更换APP皮肤<2>_利用反射对android实现主题切换

利用反射对android实现主题切换

前面通过实现Factory来获取所有的UI和属性等.将前面那个工程进行调整,参考其他网络上面的一些信息,调整和更新ActionBar右上角的menu字体颜色和背景,通过这个小例子,从某种程度可以反映更换APP皮肤基本的思路.


  1. package com.oneplus.factoryimplapp;
  2. import android.app.Activity;
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.os.Handler;
  6. import android.util.AttributeSet;
  7. import android.view.InflateException;
  8. import android.view.LayoutInflater;
  9. import android.view.Menu;
  10. import android.view.View;
  11. import android.widget.TextView;
  12. import com.oneplus.factoryimplapp.R;
  13. import com.oneplus.base.OneplusBaseActivity;
  14. /**
  15. *
  16. */
  17. /**
  18. * @author zhibao.liu
  19. * @date 2015-12-8
  20. * @company : oneplus.Inc
  21. */
  22. public class OneplusFactoryActivity extends /*OneplusBase*/Activity {
  23. @Override
  24. protected void onCreate(Bundle savedInstanceState) {
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.oneplus_factory);
  27. }
  28. @Override
  29. public boolean onCreateOptionsMenu(Menu menu) {
  30. // Inflate the menu; this adds items to the action bar if it is present.
  31. getMenuInflater().inflate(R.menu.oneplus_factory, menu);
  32. setMenuBackground();
  33. return true;
  34. }
  35. /** set menu style */
  36. protected void setMenuBackground() {
  37. this.getLayoutInflater().setFactory(
  38. new android.view.LayoutInflater.Factory() {
  39. public View onCreateView(String name, Context context,AttributeSet attrs) {
  40. // set self-define inflate
  41. if (name.equalsIgnoreCase("TextView")) {
  42. try {
  43. LayoutInflater f = getLayoutInflater();
  44. final View view = f.createView(name, null,attrs);
  45. new Handler().post(new Runnable() {
  46. public void run() {
  47. // set background color
  48. view.setBackgroundResource(R.color.oneplus_menu);
  49. // set font color
  50. ((TextView) view).setTextColor(0xff0000ff);
  51. }
  52. });
  53. return view;
  54. } catch (InflateException e) {
  55. e.printStackTrace();
  56. } catch (ClassNotFoundException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. return null;
  61. }
  62. }
  63. );
  64. }
  65. }

这是一个非常简单的更新style的例子.






声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/86940
推荐阅读
相关标签
  

闽ICP备14008679号