从android框架覆盖布局xml

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包中的布局文件?

Sco*_*per 6

我知道这是一个老问题,但我也想重写库布局与我自己的,这里是我做到了。

有问题的布局称为 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)

我将解释四个部分。

  • 名称:这是您要覆盖的布局的名称
  • Type:您要覆盖的资源类型,在这种情况下是布局。
  • tools:override:这是告诉Android Studio用自己的方法覆盖库布局的方法。
  • :在这里您可以指定要使用的资源。

您可以通过这种方式对任何资源类型执行此操作。

  • 您所指的布局 ** 不是 ** 来自框架,它来自一个库,您要附加到您的项目中(准确地说 - 设计支持库)。不幸的是,你的回答对我没有帮助,因为通过你提到的方法你不能覆盖例如`R.layout.popup_menu_item_layout`。您的解决方案已在问题本身中指出。谢谢。 (2认同)

Gau*_*ish 0

你想做什么?

如果只想替换菜单项的外观,您可以尝试以下操作:

  1. 创建自定义MyMenuAdapter extends MenuAdapter
  2. 重写该getView方法以从适配器返回视图。