Подтвердить что ты не робот

Переопределить макет xml из фреймворка android

Проблема

Я хочу переопределить файл макета из пространства имен 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?

4b9b3361

Ответ 1

Что вы пытаетесь сделать?

Если идея заменить только элемент меню, вы можете попробовать следующее:

  • Создайте пользовательский MyMenuAdapter extends MenuAdapter
  • Отмените метод getView, чтобы вернуть представление из вашего адаптера.

Ответ 2

Я знаю, что это старый вопрос, но я также хотел переопределить библиотечный макет с моим собственным, вот как я это сделал.

Рассматриваемый макет назывался 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>

Есть четыре части, которые я объясню.

  • Имя. Это имя макета, который вы хотите переопределить.
  • Тип: тип ресурса, который вы пытаетесь переопределить, в этом случае макет.
  • tools: переопределить. Так вы сообщаете Android Studio о переопределении макета библиотеки своим собственным.
  • Значение. Здесь вы указываете, какой ресурс вы хотите использовать.

Вы можете сделать это с любым типом ресурса таким образом.