灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:3989回复:1

Android主题定制及修改

楼主#
更多 发布于:2012-11-10 14:21

Android主题定制及修改


简介:在写Android的App时,我们在Layout中的xml文件中都会引用到大量的布局组件及风格,有时Android提供的原生组件并不能满足我们的需求,这时我们就要考虑对style及theme进行定制及修改。


布局文件的解释原理:
在Layout的每一个控件如TextView、EditText、Button等,例如Button控件,在目录frameworks/base/core/java/android/widget/下存在Button.java这个文件,在Button.java代码:
       public Button(Context context, AttributeSet attrs) {
       this(context, attrs, com.android.internal.R.attr.buttonStyle);
   }
   public Button(Context context, AttributeSet attrs, int defStyle) {
       super(context, attrs, defStyle);
   }
   在layout中的布局控件就是引用的Button.java这个控制,写完App程序进行编译时,它会自动引用及关联相应的控件定义。第一个构造函数是Button的默认style,而第二个会根据写app写的style进行选择需要的style.Button继承自TextView.java,在这个文件中的构造函数会看到选择的过程,这个构造函数是相当庞大的一个函数。


Button.java有引用相关的style及主题,例如在Button.java就引用了buttonStyle这个style,在写layout就可以在Button这个控制中加入这个style,所有的风格的定义都是在framework中的在frameworks/base/core/res/res/values/themes_device_defaults.xml有关于所有style的theme的名字,这些style的定义在frameworks/base/core/res/res/values/styles_device_defaults.xml文件中,进扩展Item便可以得到某个style的的所有属性。


在styles.xml存在这个的定义:
       <style name="Widget.DeviceDefault.Button" parent="Widget.Holo.Button" >
       </style>
   这里的Widget.DeviceDefault.Button继承自Widget.Holo.Button,这里Widget.Holo.Button style便拥有Widget.Holo.Button 控件上的所有属性及功能,这里跟类继承非常类似,如果不需要Widget.Holo.Button控件的一些item,可以进行重写,
   <style name="Widget.DeviceDefault.Button" parent="Widget.Holo.Button" >
   <item name="android:textColor">@android:color/XXX</item>
   </style>
   便对android:textcolor进行了复写,这里把XXX可以在一个xml定义,并写上相应的颜色值,由于在framework中进行了修改,所有在app中引用的这个控件都将进行修改。如果不想在所有的app中这个控件都起作用,便可以在app中对这个控件进行重写。将style写在一个app的layout中的xml文件,只对此app起作用。

喜欢0 评分0
wldtk
新手上路
新手上路
  • 注册日期2012-10-11
  • 发帖数38
  • QQ
  • 火币41枚
  • 粉丝1
  • 关注0
沙发#
发布于:2012-11-23 15:58
选择千锋 选择卓越  千锋3G 手机软件开发培训第一品牌
iphone培训
千锋iphone培训

回复(0) 喜欢(0)     评分
游客

返回顶部