文档章节

修改安卓默认的系统button样式,以及其它系统控件的默认样式

zxcholmes
 zxcholmes
发布于 2015/03/06 19:14
字数 895
阅读 243
收藏 0
点赞 0
评论 0

    先介绍下修改原理:首先打开位于android.widget包下面的Button.java文件,这里有一句关键的代码如下:

public Button(Context context, AttributeSet attrs) {
        this(context, attrs, com.android.internal.R.attr.buttonStyle);
    }

其中com.android.internal.R.attr.buttonStyle就是我们修改样式的关键了,网上的教程的修改方法大都是:

<Button
        style="@style/ButtonStyle"
        android:layout_width="wrap_content"
        android:layout_height="40dp"
        android:layout_weight="1"
        android:text="价格" />



    也就是在对应的xml里面button控件里面编写style达到目的。
但是如果我们的app需要完全统一整个应用的button的样式,那么就需要在每一个button里面添加style。
这显然效率太低下了。

    接下来打开我们项目中values文件夹下面的styles.xml文件,我们创建安卓项目的时候,会有一个默认的styles文件。
    打开之后找到这段代码:

<style name="AppBaseTheme" parent="Theme.Holo.Light">
        <!--
            Theme customizations available in newer API levels can go in
            res/values-vXX/styles.xml, while customizations related to
            backward-compatibility can go here.
        -->
    </style>

    <!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">



   不保证读者的默认styles.xml和我的是一样的,不过大概是这个样子,有可能读者的最低支持是2.3、那么就没有Them.Light。
    我们使用eclipse的快捷键打开这个Theme.Holo.Light。可以看到如下代码:
<style name="Theme.Holo.Light" parent="Theme.Light">
        <item name="colorForeground">@android:color/bright_foreground_holo_light</item>
        <item name="colorForegroundInverse">@android:color/bright_foreground_inverse_holo_light</item>
        <item name="colorBackground">@android:color/background_holo_light</item>
        <item name="colorBackgroundCacheHint">@android:drawable/background_cache_hint_selector_holo_light</item>
        <item name="disabledAlpha">0.5</item>
        <item name="backgroundDimAmount">0.6</item>
<!--此处省略大部分中间样式-->
 <!-- Button styles -->
        <item name="buttonStyle">@android:style/Widget.Holo.Light.Button</item>

        <item name="buttonStyleSmall">@android:style/Widget.Holo.Light.Button.Small</item>
        <item name="buttonStyleInset">@android:style/Widget.Holo.Light.Button.Inset</item>

        <item name="buttonStyleToggle">@android:style/Widget.Holo.Light.Button.Toggle</item>
        <item name="switchStyle">@android:style/Widget.Holo.Light.CompoundButton.Switch</item>

        <item name="selectableItemBackground">@android:drawable/item_background_holo_light</item>
        <item name="borderlessButtonStyle">@android:style/Widget.Holo.Light.Button.Borderless</item>
        <item name="homeAsUpIndicator">@android:drawable/ic_ab_back_holo_light</item>



    从上面的代码,可以看到buttonStyle这个样式:
这个就是我们修改的关键了,如果读者有兴趣查看Holo主题的button样式是怎么编写的,可以自行查看,这里不是介绍的重点。

    接下来开始定义我们自己的全局button的样式。

<!-- Application theme. -->
    <style name="AppTheme" parent="AppBaseTheme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:buttonStyle">@style/ButtonStyle</item>
        <!-- All customizations that are NOT specific to a particular API-level can go here. -->
    </style>
   <style name="ButtonStyle" parent="@android:style/Widget.Button">
       <item name="android:background">@drawable/app_gray_radius_btn</item>
       
   </style>



    我们在AppTheme 里面添加一个item,名字叫做android:buttonStyle,然后在下面编写我们要修改的butto的样式。

    这里有一点需要注意的就是我们需要继承android:style/Widget.Button这个样式,因为如果不继承的话,我们就需要修改所有button的属性。而当前的示例中,我修改的只是background,其它属性我们照旧搬安卓本地主题的设置。
    而且平时我们在编写界面的时候,对button设置了background之后,其实只是覆盖了系统默认button的其中一个样式而已,这点我们从button的源码可以看得到。
    如果你不继承Widget.Button的话,那么出来的效果可能是面目全非的。

    附上两张效果图,一张是没有定义全局样式之前的,一张是定义了之后的。

可以看到确确实实是修改了,而且我并没有为每一个button编写android:style="xxxx".

这种修改方式可以推广到其它的控件的修改,至于修改思路,可以参照上面介绍的button样式的修改方法。


© 著作权归作者所有

共有 人打赏支持
zxcholmes
粉丝 4
博文 15
码字总数 13259
作品 0
广州
艾润物联/vehicle-keyboard-android

停车王车牌号码专用键盘 VehicleKeyboard - Android 是停车王品牌的各端产品线的基础组件,专为提高中国车牌号码输入速度而定制开发的专用键盘组件,包括以下三个项目: Android项目,为And...

艾润物联 ⋅ 04/24 ⋅ 0

ToolBar和Menu的联合使用及问题

在布局中写ToolBar属性的时候可以设置logo、title、titleTextColor、subTitle等(logo默认显示在ToolBar的左侧,title和subtitle显示在logo右侧,如果不设置subtitle,title会默认竖直居中)...

hasaigi ⋅ 2016/10/22 ⋅ 0

Windows Phone Button控件样式自定义

概述 Button是各种手机平台中最重要的控件之一,我们与系统的大部分交互都会通过按钮进行,在Android和iOS中都提供了很方便的按钮自定义方式,Android可以采用selector背景选择器进行按钮状态...

dodola ⋅ 2013/03/10 ⋅ 0

Android入门第十六篇之Style与Theme

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处! 越来越多互联网企业都在Android平台上部署其客户端,为了提升用户体验,这些客户端都做得布局合理而且美观.......Android的Sty...

晨曦之光 ⋅ 2012/03/14 ⋅ 1

[译] 论 Android 中 Span 的正确打开方式

原文地址:Underspanding spans 原文作者:Florina Muntenescu 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/gold-m… 译者:tanglie1993 校对者:dandyxu, ALVINYEH Span 够为文字...

Android_开发者 ⋅ 06/05 ⋅ 0

Android开发偷懒技巧之XSelector

平时我们在开发项目时看到设计稿中有各种对控件设置在不同状态下显示不同的背景(边框、颜色等)样式或者不同的文字显示颜色等效果,这时候我们就需要在项目的resource目录下的drawable中创建...

u012532559 ⋅ 05/05 ⋅ 0

Android技术体系结构

一、Android技术体系结构 1.Android项目目录结构 src 源文件 gen ADT自动生成的JAVA文件,程序员千万不要去修改 Android 4.2.2+Android Private Libraries jar文件 assets 资源文件,图片,音...

beenlee ⋅ 2013/12/09 ⋅ 0

Android技术体系结构

一、Android技术体系结构 1.Android项目目录结构 src 源文件 gen ADT自动生成的JAVA文件,程序员千万不要去修改 Android 4.2.2+Android Private Libraries jar文件 assets 资源文件,图片,音...

dbeenlee ⋅ 2013/12/07 ⋅ 0

Android 之 Material Design(三)—DrawerLayout+NavigationView+Toolbar(点击icon打开关闭侧滑菜单)

前言 关于Material Design相关的控件,前两篇文章已经介绍了一些常用的控件了,这篇文章主要介绍一下DrawerLayout+NavigationView+Toolbar。这样Material Design的也介绍的差不多了,剩下Rec...

AFinalDream ⋅ 2017/06/22 ⋅ 0

常见的移动端H5页面开发遇到的坑和解决办法

手机共通问题 问题一:用同等比例的图片在PC机上很清楚,但是手机上很模糊,原因是什么呢? 经研究发现是devicePixelRatio作怪,因为手机分辨率太小,如果按照分辨率来显示网页字会非常小,所以苹果...

webmirror ⋅ 05/02 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

istio 文档

https://istio.io/docs/concepts/ https://istio.io/docs/concepts/traffic-management/handling-failures/ https://istio.io/docs/concepts/traffic-management/rules-configuration/......

xiaomin0322 ⋅ 18分钟前 ⋅ 0

编程语言的作用及与操作系统和硬件的关系

一、编程语言的作用及与操作系统和硬件的关系 作用:编程语言是计算机语言,是一种程序员与计算机之间沟通的介质,通过编程语言可以使得计算机能够根据人的指令一步一步去工作,完成某种特定...

slagga ⋅ 29分钟前 ⋅ 0

runtime实现按钮点击事件

也不能说是实现吧,,,就是有点类似于RAC里边的写法,不用给btn添加另外的点击事件,就那个add...select...这样子很不友好,来看下代码: [self.btn handleControlEvent:UIControlEventTou...

RainOrz ⋅ 29分钟前 ⋅ 0

Windows系统运维转linux系统运维的经历

开篇之前,首先介绍一下我的背景把:我是一个三线城市的甲方运维。最近,在《Linux就该这么学》书籍的影响下和朋友小A(Linux运维已经三年了,工资也比我的高很多)的影响下,决定转行。最近...

linux-tao ⋅ 30分钟前 ⋅ 0

zip压缩工具,tar打包工具

zip压缩工具 zip打包工具跟前面说到的gzip,bz2,xz 工具最大的不一样是zip可以压缩目录。如果没有安装,需要使用yum install -y zip 来安装。安装完之后就可以直接使用了,跟之前提到的压缩...

李超小牛子 ⋅ 38分钟前 ⋅ 0

使用npm发布自己的npm组件包

一、注册npm账号 官网:https://www.npmjs.com/signup 注册之后需要进行邮箱验证,否则后面进行组件包发布时候会提示403错误,让进行邮箱核准。 二、本地新建一个文件夹,cd进入后使用npm i...

灰白发 ⋅ 39分钟前 ⋅ 0

010. 深入JVM学习—垃圾收集策略概览

1. 新生代可用GC策略 1. 串行GC(Serial Copying) 算法:复制(Copying)清理算法; 操作步骤: 扫描年轻代中所有存活的对象; 使用Minor GC进行垃圾回收,同时将存活对象保存到“S0”或“S...

影狼 ⋅ 40分钟前 ⋅ 0

JVM性能调优实践——JVM篇

在遇到实际性能问题时,除了关注系统性能指标。还要结合应用程序的系统的日志、堆栈信息、GClog、threaddump等数据进行问题分析和定位。关于性能指标分析可以参考前一篇JVM性能调优实践——性...

Java小铺 ⋅ 41分钟前 ⋅ 0

误关了gitlab sign-in 功能的恢复记录

本想关sign-up的,误点了sign-in 退出后登录界面提示: No authentication methods configured 一脸懵逼.. 百度后众多方案说修改application_settings 的 signin_enabled字段; 实际上新版本字段...

铂金蛋蛋 ⋅ 42分钟前 ⋅ 0

登录后,后续请求接口没有带登录cookie可能原因

1.XMLHttpRequest.withCredentials没设置好,参考https://developer.mozilla.org/zh-CN/docs/Web/API/XMLHttpRequest/withCredentials...

LM_Mike ⋅ 42分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部