azi*_*ian 26 xml android android-layout aapt android-resources
我想重写从Android的命名空间,例如布局文件R.layout.popup_menu_item_layout(这是从代码中引用的com.android.internal.R.layout.popup_menu_item_layout).通过说覆盖,我假设xml在项目中声明一个文件,该文件将优先于框架拥有的布局.
请注意,这只是一个示例布局,因此问题涉及sdk/platforms/android-XX/data/res/layout目录中存在的每个布局.
工具:覆盖
有一个未记录的 tools:override标签可用,它会覆盖特定的资源.请参阅此答案以获取示例,该示例将覆盖设计支持库中的值,而不是来自Android框架的值.
应用于tools:override="true"布局的根标签不会生效.
XML布局参考 - refs.xml
正如在描述这个帖子,声明refs.xml文件/values/与以下内容目录:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="layout" name="activity_main">@layout/activity_second</item>
</resources>
Run Code Online (Sandbox Code Playgroud)
将参考activity_second.xml一次activity_main.xml使用.有一个答案建议使用这种技术来替代Snackbar布局.
这也不会生效.
有没有合法的方法来覆盖/替换android包中的布局文件?
我知道这是一个老问题,但我也想重写库布局与我自己的,这里是我做到了。
有问题的布局称为 design_bottom_navigation_item
在refs.xml中,我添加了以下内容:
<resources xmlns:tools="http://schemas.android.com/tools">
<item name="design_bottom_navigation_item" type="layout" tools:override="true">@layout/bottom_navigation_item</item>
</resources>
Run Code Online (Sandbox Code Playgroud)
我将解释四个部分。
您可以通过这种方式对任何资源类型执行此操作。