在Android上重用drawable的部件
我正在为我的申请准备抽签。我有很多单选按钮,它们显示为带有可选帧的图像(选中时)。一个可绘制的视图如下所示:在Android上重用drawable的部件,android,android-drawable,Android,Android Drawable,我正在为我的申请准备抽签。我有很多单选按钮,它们显示为带有可选帧的图像(选中时)。一个可绘制的视图如下所示: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_checked="true"> <layer-list>
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary" />
</shape>
</item>
<item>
<inset android:insetTop="@dimen/selectionBorderSize"
android:insetLeft="@dimen/selectionBorderSize"
android:insetRight="@dimen/selectionBorderSize"
android:insetBottom="@dimen/selectionBorderSize">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/sharp7" >
<padding android:bottom="@dimen/selectionBorderSize"
android:top="@dimen/selectionBorderSize"
android:left="@dimen/selectionBorderSize"
android:right="@dimen/selectionBorderSize" />
</bitmap>
</item>
</layer-list>
</inset>
</item>
</layer-list>
</item>
<item android:state_checked="false">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</item>
<item>
<inset android:insetTop="@dimen/selectionBorderSize"
android:insetLeft="@dimen/selectionBorderSize"
android:insetRight="@dimen/selectionBorderSize"
android:insetBottom="@dimen/selectionBorderSize">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/sharp7" >
<padding android:bottom="@dimen/selectionBorderSize"
android:top="@dimen/selectionBorderSize"
android:left="@dimen/selectionBorderSize"
android:right="@dimen/selectionBorderSize" />
</bitmap>
</item>
</layer-list>
</inset>
</item>
</layer-list>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</item>
</selector>
另一个:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="@color/colorPrimary" />
</shape>
</item>
<item>
<inset android:insetTop="@dimen/selectionBorderSize"
android:insetLeft="@dimen/selectionBorderSize"
android:insetRight="@dimen/selectionBorderSize"
android:insetBottom="@dimen/selectionBorderSize">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/sharp6" >
<padding android:bottom="@dimen/selectionBorderSize"
android:top="@dimen/selectionBorderSize"
android:left="@dimen/selectionBorderSize"
android:right="@dimen/selectionBorderSize" />
</bitmap>
</item>
</layer-list>
</inset>
</item>
</layer-list>
</item>
<item android:state_checked="false">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</item>
<item>
<inset android:insetTop="@dimen/selectionBorderSize"
android:insetLeft="@dimen/selectionBorderSize"
android:insetRight="@dimen/selectionBorderSize"
android:insetBottom="@dimen/selectionBorderSize">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff"></solid>
</shape>
</item>
<item>
<bitmap android:src="@drawable/sharp6" >
<padding android:bottom="@dimen/selectionBorderSize"
android:top="@dimen/selectionBorderSize"
android:left="@dimen/selectionBorderSize"
android:right="@dimen/selectionBorderSize" />
</bitmap>
</item>
</layer-list>
</inset>
</item>
</layer-list>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</item>
</selector>
如果您不想玩“查找2个差异”,唯一需要更改的是
标记中的图像
我在这里感到浑身湿透。有没有一种方法可以重复使用这个可拉伸的部件
1 WET,例如not简而言之:XML可绘制文件没有参数,因此这可能会变得有点复杂 通常我会尝试将所有单个
内容分离到单独的可绘制文件中,然后将它们包含在
中。然后,这些可以在其他抽屉中重复使用
例如,您可以将以下项目移动到单独的文件中:
<item>
<shape android:shape="rectangle">
<solid android:color="#ffffff" />
</shape>
</item>
现在,我们需要定义一个Gradle任务,将可绘制模板复制到实际的/res/drawable
文件夹中,并包含所需的位图可绘制内容:
def drawablesToGenerate = ['sharp5', 'sharp6', 'sharp7', 'sharp8'] // bitmap names
task drawableTemplate << {
drawablesToGenerate.each { drawableName -> // for each drawable
copy {
println("copy template for ${drawableName}")
from 'src/main/res/raw' // source folder
into 'src/main/res/drawable' // target folder
include 'drawable_template.xml' // template file
// rename file to final drawable
rename('drawable_template.xml', "drawable_gen_${drawableName}.xml")
expand(bitmapdrawable: "${drawableName}")
}
}
}
preBuild.dependsOn drawableTemplate
def drawablesToGenerate=['sharp5','sharp6','sharp7','sharp8']//位图名称
任务drawableTemplate//用于每个drawableTemplate
抄袭{
println(“复制${drawableName}的模板”)
从'src/main/res/raw'//源文件夹
进入'src/main/res/drawable'//目标文件夹
包括“drawable_template.xml”//模板文件
//将文件重命名为最终可绘制
重命名('drawable_template.xml',“drawable_gen${drawableName}.xml”)
展开(bitmapdrawable:“${drawableName}”)
}
}
}
preBuild.dependsOn drawableTemplate
该脚本可以放入应用程序(模块)的build.gradle
文件中
现在,包含不同位图的最终绘图是在编译时从单个模板文件生成的。它们的名称为drawable\u gen\u sharpX.xml
,可以用作普通的drawable
def drawablesToGenerate = ['sharp5', 'sharp6', 'sharp7', 'sharp8'] // bitmap names
task drawableTemplate << {
drawablesToGenerate.each { drawableName -> // for each drawable
copy {
println("copy template for ${drawableName}")
from 'src/main/res/raw' // source folder
into 'src/main/res/drawable' // target folder
include 'drawable_template.xml' // template file
// rename file to final drawable
rename('drawable_template.xml', "drawable_gen_${drawableName}.xml")
expand(bitmapdrawable: "${drawableName}")
}
}
}
preBuild.dependsOn drawableTemplate