2016-06-09 5 views
1

У меня есть приложение для Android, в котором у меня есть боковое меню практически во всех моих действиях. Для этого я должен выполнить следующую операцию xml с макетом ящика и некоторыми другими элементами для согласованного пользовательского интерфейса. НапримерКак избежать дублирования кода в android xml

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:id="@+id/drawer_layout" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:fitsSystemWindows="true"> 

    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 

     <include layout="@layout/toolbar" 
      android:id="@+id/toolbar_container"/> 

     <<--ACTIVITY_XML-->> 

    </RelativeLayout> 
</android.support.v4.widget.DrawerLayout> 

Есть ли способ, чтобы не скопировать код снова и снова.

Я думал об одном способе, Замените <<--ACTIVITY_XML-->> с тегом include. Тогда я бы переопределил setContentView() в своей базовой деятельности, где я бы раздул основной макет, упомянутый выше, а затем раздул включить в него тег. Является ли это хорошим или плохим с точки зрения использования памяти и времени.

+0

поиск по включению и тегу merge использовать как для лучшей оптимизации –

+0

вы можете использовать 1 активность в качестве основного контейнера с общими элементами пользовательского интерфейса и ящиком, а затем использовать замену фрагмента в этом действии, это рекомендуемый подход. – Yazan

ответ

1

Есть 2 подхода:

  1. Override setContentView в ваш супер класс активности и раздувать из кода макета активности экземпляра в корневом макете.
  2. Использование включает в себя тег в дополнение к слияние тег для оптимизации производительности в каждом макете деятельности.

Лично в моем приложении я предпочитаю переопределять setContentView для вставки панели инструментов в каждое действие, сохраняя один макет для каждой операции, копируя корневой макет.

В вашем случае, возможно, лучше использовать макет «root», накачивающий пользовательскую активность xml, чтобы централизовать код. Но если в будущем, например, вы захотите удалить ящик для одного действия, вам придется это сделать.

+0

Не могли бы вы объяснить второй подход один раз. О ящике, чтобы быть там не для одного вида деятельности, я создал две базы. Активности - baseActivity, sideBarActivity. Но для sideBarActivity также могут быть некоторые изменения в панели инструментов и аналогичные вещи. У вас есть решение для этого – DarkCoderRises

+0

Используя 2-й подход, вы должны скопировать код для каждого вида деятельности, используя include и merge, но это не то, что вы хотите посмотреть на вопрос , Если у вас уже есть 2 базовых вида деятельности, они идеально подходят для видимости ящика. Используйте первый подход, и у вас будет 2 разных корневых макета с настраиваемой структурой действия, раздутой от кода. О вашей памяти сомнения, это только другая организация кода, это не влияет на производительность, если код хорошо написан – lubilis