从android框架覆盖布局xml

问题

我想覆盖android命名空间的布局文件,例如R.layout.popup_menu_item_layout ( 从代码引用 com.android.internal.R.layout.popup_menu_item_layout )。 通过说覆盖 ,我假设在项目中声明一个xml文件,这将优先于框架拥有的布局。

请注意,这只是一个示例布局,所以问题涉及到sdk/platforms/android-XX/data/res/layout目录中的每个布局。

我试过了

工具:覆盖

有一个没有logging的 tools:override可用的tools:override标签,覆盖特定的资源。 看到这个答案的例子,它覆盖了devise支持库的值, 而不是从Android框架。

对布局的根标签应用tools:override="true"将不会生效。


XML布局引用 – refs.xml

如本文所述,在/values/目录中声明一个refs.xml文件,其中包含以下内容:

 <?xml version="1.0" encoding="utf-8"?> <resources> <item type="layout" name="activity_main">@layout/activity_second</item> </resources> 

一旦使用了activity_second.xml将会引用activity_second.xml 。 有一个答案 ,build议使用这种技术,以取代Snackbar的布局。

这也不会生效。

有没有任何合法的方式来覆盖/replaceandroid包中的布局文件?

Solutions Collecting From Web of "从android框架覆盖布局xml"

你在做什么?

如果只想replace菜单项的样子,可以尝试以下操作:

  1. 创build一个自定义MyMenuAdapter extends MenuAdapter
  2. 重写getView方法以从您的适配器返回视图。

我知道这是一个古老的问题,但我也想用我自己来重写一个库布局,下面是我做的。

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

有四个部分,我将解释这一点。

  • 名称 :这是您要覆盖的布局的名称
  • types :您尝试覆盖的资源的types,在这种情况下是布局。
  • 工具:覆盖 :这是你告诉Android Studio用你自己的方式重写库布局的方法。
  • 价值 :这是您指定要使用的资源的地方。

你可以用这种方法用任何资源types来做到这一点。