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起作用。

更多相关文章

  1. Study on Android【二】--ContentProvider数据模型概述
  2. Android之Context 和 application context
  3. Android(安卓)自定义控件
  4. Study on Android【二】--ContentProvider数据模型概述
  5. Android中的控件
  6. Android事件分发之dispatchTouchEvent()
  7. Android和js进行交互
  8. shape基本用法及全部属性定义
  9. Android内存管理-SoftReference的使用

随机推荐

  1. android资料下载地址汇总
  2. android ListView 多次调用 getView方法
  3. Could not find com.android.tools.build
  4. android studio mark
  5. Android(安卓)工程混淆后无法找到自定义
  6. Android(安卓)文件管理器 Android文件管
  7. Android(安卓)Timer 更好方法
  8. Android(安卓)listView
  9. android模拟器上网
  10. Android(安卓)下压缩图片—微弱失真