Ответ 1
Что вы пытаетесь сделать?
Если идея заменить только элемент меню, вы можете попробовать следующее:
- Создайте пользовательский
MyMenuAdapter extends MenuAdapter
- Отмените метод
getView
, чтобы вернуть представление из вашего адаптера.
Я хочу переопределить файл макета из пространства имен 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
Как описано в this post, объявив файл refs.xml
в каталоге /values/
со следующим содержимым:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item type="layout" name="activity_main">@layout/activity_second</item>
</resources>
будет ссылаться на activity_second.xml
после использования activity_main.xml
. Там ответ, который предлагает использовать этот метод, чтобы заменить макет Snackbar
.
Это также не вступит в силу.
Есть ли законный способ переопределить/заменить файл макета из пакета android?
Что вы пытаетесь сделать?
Если идея заменить только элемент меню, вы можете попробовать следующее:
MyMenuAdapter extends MenuAdapter
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>
Есть четыре части, которые я объясню.
Вы можете сделать это с любым типом ресурса таким образом.