现在的位置: 首页 > 综合 > 正文

Android主题定制及修改

2013年10月09日 ⁄ 综合 ⁄ 共 1540字 ⁄ 字号 评论关闭

简介:在写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起作用。

抱歉!评论已关闭.