前言
昨天项目里遇到了两个小问题,都是基本的使用问题:
- 本地仓库引用方式使用 aar;
- style 中使用自定义控件的属性
索性就把找到的解决方法写下来。
1、本地引用 aar
昨天,项目里想找一个好一些的RatingBar控件,公司无法正常登陆 GitHub
,就在手机上查了几个库。都不太理想,不是依赖的包版本太高,一般的问题都是尺寸不能灵活的定义,定小了就会产生不良反应。最后找到了一款符合要求的库,不是图片替换方式的,尺寸能够随意设定。不过限制就是它是一个只支持多边形的 RatingBar,另外就是不同于其他项目,没法通过一般引用第三方库的方式使用,类似 build.gradle
中这样写:
1
| compile 'io.reactivex:rxjava:1.1.0'
|
在上面却是这样的一句话:
1
| (currently getting this set up with maven/jcenter. will update when available)
|
o(╯□╰)o ,不过所幸的是library代码可以下下来,然后把它打成了 aar
文件放在主工程 Module
里来用了。本来以为和 jar
文件一样的使用方式就行了,放到 libs
目录下面,然后 build.gradle
中这样写:
1 2 3 4 5
| dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile fileTree(dir: 'libs', include: '*.aar') .... }
|
结果一运行,就报了类似下面的错误:
1
| only jar-type local dependencies supported.....
|
哦漏,不行啊。改变方式,于是乎变成本地仓库引用的方式,下面这样。。。。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| repositories { flatDir { dirs 'libs' } } dependencies { compile fileTree(dir: 'libs', include: '*.jar') compile(name: 'flexibleratingbar', ext: 'aar') }
|
OK,完美应用。。。。
2、style 中使用自定义控件的属性
就刚才的控件使用,项目里用到的地方比较多,项目主页上给出了使用方式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| <amagi82.flexibleratingbar.FlexibleRatingBar android:id="@+id/flexibleRatingBar" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="6" android:rating="1.5" android:stepSize="0.5" app:colorFillOff="@android:color/transparent" app:colorFillOn="@color/tealA400" app:colorFillPressedOff="@android:color/transparent" app:colorFillPressedOn="@color/tealA200" app:colorOutlineOff="@color/teal800" app:colorOutlineOn="@color/teal900" app:colorOutlinePressed="@color/teal500" app:polygonVertices="7" app:polygonRotation="0" app:strokeWidth="5dp"/>
|
这一大推的属性,任谁 Command + C/V 的一路下来也要吐了,那我们就把它抽出去一些写成复用的 style
,然后在使用的 layout文件
里就变成了:
1 2 3
| <amagi82.flexibleratingbar.FlexibleRatingBar android:id="@+id/ratingBar" style="@style/ratingbar_style"/>
|
style.xml
文件里是这样:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <style name="ratingbar_style"> ... <item name="android:rating">0</item> <item name="android:numStars">5</item> <item name="android:stepSize">0.5</item> <item name="android:clickable">true</item> <item name="app:colorFillOff">@color/trans</item> <item name="app:colorFillOn">@color/little_yellow</item> <item name="app:colorFillPressedOff">@color/trans</item> <item name="app:colorFillPressedOn">@color/little_yellow</item> <item name="app:colorOutlineOff">@color/little_yellow</item> <item name="app:colorOutlineOn">@color/little_yellow</item> ... </style> </resources>
|
一运行,报错属性找不到。。。后来找了下这个问题,说是命名空间改成包名的,这样:
1 2 3 4 5
| <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res/amagi82.flexiblratingbar"> ... </resources>
|
再运行,还是报错属性找不到。。。,然后继续找,变成了下面这样:
1 2 3 4 5 6 7 8 9
| <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="ratingbar_style"> ... <item name="amagi82.flexiblratingbar:colorFillOn">@color/little_yellow</item> <item name="amagi82.flexiblratingbar:colorFillPressedOff">@color/trans</item> <item name="amagi82.flexiblratingbar:colorFillPressedOn">@color/little_yellow</item> ... </style> </resources>
|
再次运行,继续报错属性找不到。。。泪奔 ┭┮﹏┭┮,没法子继续找,最后成了下面这样:
1 2 3 4 5 6 7 8 9
| <resources xmlns:android="http://schemas.android.com/apk/res/android"> <style name="ratingbar_style"> ... <item name="com.demo.app:colorFillOn">@color/little_yellow</item> <item name="com.demo.app:colorFillPressedOff">@color/trans</item> <item name="com.demo.app:colorFillPressedOn">@color/little_yellow</item> ... </style> </resources>
|
运行,通过 :-D,其中 com.demo.app
为主工程 Module
即应用的包名