如何在布局中使用内联绘图 xml
how to have an inline drawable inside layout xml
我有一些仅在单个 xml 布局中使用的可绘制资源。我想将它们插入到特定的 xml 布局(内联)中,这样我就可以更好地组织我的文件并减少超载的可绘制文件夹
我找到了这个主题:
https://developer.android.com/guide/topics/resources/complex-xml-resources
但这使用内联可绘制对象作为另一个资源...我想在布局中使用它 xml
示例:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_corner"
android:orientation="horizontal"
android:padding="@dimen/smallMargin">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:drawableTop="@drawable/code"
android:text="@string/delete"
/>
</androidx.appcompat.widget.LinearLayoutCompat>
其中 code.xml 是:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="@dimen/popupButtonSize"
android:height="@dimen/popupButtonSize"
android:drawable="@drawable/ic_population" />
</layer-list>
代码仅用于该特定布局,有什么方法可以使其内联吗?
好像是什么问题?如果您按照指南操作,它会毫无问题地工作:
- 将
xmlns:aapt="http://schemas.android.com/aapt"
添加到根节点
- 将
android:drawableTop="@drawable/code"
属性替换为 aapt:attr
child
最终 XML 将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_corner"
android:orientation="horizontal"
android:padding="@dimen/smallMargin">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="@string/delete">
<aapt:attr name="android:drawableTop">
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="@dimen/popupButtonSize"
android:height="@dimen/popupButtonSize"
android:drawable="@drawable/ic_population" />
</layer-list>
</aapt:attr>
</androidx.appcompat.widget.AppCompatButton>
</androidx.appcompat.widget.LinearLayoutCompat>
我有一些仅在单个 xml 布局中使用的可绘制资源。我想将它们插入到特定的 xml 布局(内联)中,这样我就可以更好地组织我的文件并减少超载的可绘制文件夹
我找到了这个主题: https://developer.android.com/guide/topics/resources/complex-xml-resources
但这使用内联可绘制对象作为另一个资源...我想在布局中使用它 xml
示例:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_corner"
android:orientation="horizontal"
android:padding="@dimen/smallMargin">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:drawableTop="@drawable/code"
android:text="@string/delete"
/>
</androidx.appcompat.widget.LinearLayoutCompat>
其中 code.xml 是:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="@dimen/popupButtonSize"
android:height="@dimen/popupButtonSize"
android:drawable="@drawable/ic_population" />
</layer-list>
代码仅用于该特定布局,有什么方法可以使其内联吗?
好像是什么问题?如果您按照指南操作,它会毫无问题地工作:
- 将
xmlns:aapt="http://schemas.android.com/aapt"
添加到根节点 - 将
android:drawableTop="@drawable/code"
属性替换为aapt:attr
child
最终 XML 将如下所示:
<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/round_corner"
android:orientation="horizontal"
android:padding="@dimen/smallMargin">
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/buttonDelete"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:text="@string/delete">
<aapt:attr name="android:drawableTop">
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:width="@dimen/popupButtonSize"
android:height="@dimen/popupButtonSize"
android:drawable="@drawable/ic_population" />
</layer-list>
</aapt:attr>
</androidx.appcompat.widget.AppCompatButton>
</androidx.appcompat.widget.LinearLayoutCompat>