android怎么该样式,Android更改系统组件样式

一、问题描述

我们使用Android API中的某些组件时,发现它并不是我们想要的样式,比如RatingBar组件显示太大,更改大小之后还是达不到我们想要的结果;ProgressBar也是如此,太瘦了,我想要它变得胖一点(如图1),并且要保留原有功能,只是显示的效果变更一下,并不想自定义组件或者样式,那样工作量太大。

0818b9ca8b590ca3270a3433284dd417.png

图1 自定义样式的ProgressBar

二、问题分析

其实要想完成图1的效果,很简单的。ProgressBar在不添加任何样式时,是圆形的进度条,如果要变成水平的,需要添加如下样式:

style="@android:style/Widget.DeviceDefault.Light.ProgressBar.Horizontal"

通过一行简短的代码,进度条就变成了图2的效果了。

0818b9ca8b590ca3270a3433284dd417.png

图2 Android原生ProgressBar

但是你会感到很遗憾,这个样式只有API14以上才支持,而且不管你把高度设置为多少dp,这哥们儿就是长不高,就长长。那么下面,我将带你如何去改造这哥们儿。

三、解决方法

既然这个哥们是通过一个样式来变身的,那我们就去这个样式里一探究竟。按住ctrl键,在这个样式上单击鼠标左键,进入这个样式里。然后是不是很惊呆,好多样式啊,你会看到你刚才引用的样式:

原来它有个干爹啊!隐藏好深,我们在到它干爹那里去拜访一下,然后你懵逼了,这还有个干爹(如下),是的,没错,关系很复杂吧!

不管它,咋们继续拖关系,死活都要找到幕后元凶。哎呀!总见到庐山真面目了。

@drawable/progress_horizontal_material

@drawable/progress_indeterminate_horizontal_material

16dip

16dip

至此,我们看到了改变ProgressBar的代码,现在我们把他拷贝出来(只拷贝Item项),然后自己定义一个样式,把最小高度和最大高度改成我们想要的。更改后如下(记得在属性前加上“android:”):

false

@android:drawable/progress_horizontal

@android:drawable/progress_indeterminate_horizontal

30dip

45dip

运行结果如图3,呀,这个根本没有改变嘛,而且还变成了老式的,这是什么鬼(小编就是个坑货)。

0818b9ca8b590ca3270a3433284dd417.png

图3 更改过后的ProgressBar样式

接下来就是关键的时刻了,虽然我更改了最低高度,其实是没有效果的,那么原因在哪里呢,原因就在

@android:drawable/progress_horizontal

这个属性里,我们需要去更改它的内容来达到我们想要的结果。

现在进入到你的SDK目录下,将(sdk\platforms\android-20\data\res\drawable.progress_horizontal.xml)这个路径下的文件拷贝出来,然后放到你的drawable资源目录里,然后打开它,在里面进行修改成你想要的样式。我更改的如下:

最后将

@android:drawable/progress_horizontal

这项改为如下即可。

@drawable/progress_horizontal

运行结果如图4。

0818b9ca8b590ca3270a3433284dd417.png

图4 更改ProgressBar样式效果图

三、注意事项

(1)如果出现编译错误,可以查看一下最低sdk版本,将它调到正确为止,某些样式在低版本系统上是不支持的;

(2)以下Item不能省略,省略之后后果不堪设想,想知道后果,自己去尝试吧;

@android:drawable/progress_indeterminate_horizontal

(3)你同样可以通过这类方法,去实现你想要的RatingBar组件。

(4)项目源码。

a、布局;

b、样式;

false

@drawable/progress_horizontal

@android:drawable/progress_indeterminate_horizontal

20dip

50dip

c、progress_horizontal.xml同上诉讲解中完全相同,不在鳌诉;

d、其余不在鳌诉。

由于小编技术和能力有限,文中难免会出现错误,还望指正,谢谢合作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值