我需要实现自己的属性,如in com.android.R.attr
在官方文档中找不到任何内容,因此我需要有关如何定义这些attrs以及如何在我的代码中使用它们的信息.
关于declare-styleable标记的珍贵文档很少,我们可以通过它来声明组件的自定义样式.我确实找到了这个标签format属性的有效值列表attr.虽然这很好,但它没有解释如何使用其中的一些值.浏览attr.xml(标准属性的Android源代码),我发现你可以做以下事情:
<!-- The most prominent text color. -->
<attr name="textColorPrimary" format="reference|color" />
Run Code Online (Sandbox Code Playgroud)
该format属性显然可以设置为值的组合.据推测,该format属性有助于解析器解释实际的样式值.然后我在attr.xml中发现了这个:
<!-- Default text typeface. -->
<attr name="typeface">
<enum name="normal" value="0" />
<enum name="sans" value="1" />
<enum name="serif" value="2" />
<enum name="monospace" value="3" />
</attr>
<!-- Default text typeface style. -->
<attr name="textStyle">
<flag name="normal" value="0" />
<flag name="bold" value="1" />
<flag name="italic" value="2" />
</attr>
Run Code Online (Sandbox Code Playgroud)
这两个似乎都声明了一组指定样式的允许值.
所以我有两个问题:
enum值之一的样式属性与可以采用一组值的样式属性之间的区别是什么flag? …在我的应用程序中,有多个不同高度的组件具有相同的渐变背景(我在图层列表中使用了多个形状和渐变项)。
但是在项目标签中,我必须以 50dip 指定形状的高度,并且我想在多个具有百分比度量的 UI 组件中重用它。
我发现形状中不支持重量属性。那么有没有其他替代方法可以使其在不同大小的视图或任何百分比支持的方式下工作?
我想获得 XML 样式的解决方案。
图层列表看起来像
<?xml version="1.0" encoding="utf-8"?>
<layer-list
xmlns:android="http://schemas.android.com/apk/res/android"
>
<item
android:drawable="@drawable/green_horizontal_gradient"
android:id="@+id/upper_gradient"
/>
<item
android:drawable="@drawable/half_overlay"
android:id="@+id/lower_overlay"
android:top="50dp"
/>
</layer-list>
Run Code Online (Sandbox Code Playgroud) 我想要的是背景左边为红色的背景。这样的事情。

我尝试了很多事情(有没有所见即所得的编辑器?我想我已经运行了数百次。)像下面的文章中那样指定宽度无效。 如何指定可绘制项目的宽度和高度
以下文章仅告诉我不能使用百分比,现在如何应用宽度。 Android Drawable:在XML文件中以百分比形式指定形状宽度?
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid
android:color="#FFFFFFFF"/>
</shape>
</item>
<item>
<shape android:shape="rectangle">
<solid android:color="#55FF0000" />
<size android:width="100px" />
</shape>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud) 我创建了一个Android渐变可绘制对象,其中顶部和底部为黑色,中心为透明:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<gradient
android:startColor="@android:color/black"
android:centerColor="@android:color/transparent"
android:endColor="@android:color/black"
android:angle="90"/>
</shape>
Run Code Online (Sandbox Code Playgroud)
渲染的渐变如下所示:
如您所见,黑色部分扩散到了屏幕的大部分区域。我希望黑色仅在顶部和底部的一小部分显示。有什么办法可以使透明中心变大,或者使顶部和底部的黑色条纹变小?
我尝试使用链接GradientDrawable文档中提到的其他一些XML属性,但是似乎它们都不起作用。