Расширение - правильный путь. Просто переопределите setContentView в правильном направлении.
Вот рабочий пример, но вместо ящика я использую созданную пользовательскую панель вкладок:
Определите макет с помощью своего ящика следующим образом:
это act_layout.xml
<LinearLayout
...
android:orientation="vertical"
>
<YourDrawer
...
/>
<FrameLayout
android:id="@+id/act_content"
...
>
// Here will be all activity content placed
</FrameLayout>
</LinearLayout>
Это будет ваш базовый макет, содержащий все остальные макеты в кадре act_content.
Затем создайте базовый класс активности и выполните следующие действия:
public abstract class DrawerActivity extends Activity {
protected LinearLayout fullLayout;
protected FrameLayout actContent;
@Override
public void setContentView(final int layoutResID) {
// Your base layout here
fullLayout= (LinearLayout) getLayoutInflater().inflate(R.layout.act_layout, null);
actContent= (FrameLayout) fullLayout.findViewById(R.id.act_content);
// Setting the content of layout your provided to the act_content frame
getLayoutInflater().inflate(layoutResID, actContent, true);
super.setContentView(fullLayout);
// here you can get your drawer buttons and define how they
// should behave and what must they do, so you won't be
// needing to repeat it in every activity class
}
}
То, что мы делаем, в основном перехватывает все вызовы setContentView (int resId), раздувает наш макет для ящика из xml, раздувает наш макет для активности (посредством reId, предоставляемого в вызове метода), объединяет их по мере необходимости и устанавливает contentView действия.
EDIT:
После того, как вы создали материал, описанный выше, просто приступайте к написанию приложения как обычно, создавайте макеты (без какого-либо упоминания о ящике), создавайте действия, но вместо расширения простого действия расширяйте DrawerActivity, например:
public abstract class SomeActivity extends DrawerActivity {
protected void onCreate(Bundle bundle) {
setContentView(R.layout.some_layout);
}
}
Что происходит, так это то, что setContentView (R.layout.some_layout) перехватывается. Ваш DrawerActivity загружает предоставленный вами макет из xml, загружает стандартный макет для вашего ящика, объединяет их и затем устанавливает его как contentView для действия.