Таким образом, я создал подкласс Действия под названием CustomTitlebarActivity. По существу каждый основной вид деятельности в моем приложении будет иметь пользовательскую строку заголовка со многими типичными функциями, такими как кнопка "Домой", заголовок, кнопка поиска, и т.д. В моей текущей реализации я все еще явно использую включать оператор в расположении XML для каждого CustomTitlebarActivity:
<include layout="@layout/titlebar" />
Кажется естественным, что я должен смочь сделать это в CustomTitlebarActivity. У меня есть два вопроса: Что может заменить код, это включает тег, и куда я должен поместить код? (Мой первый инстинкт должен был бы поместить его в setContentView метод CustomTitlebarActivity.)
На связанной ноте я ценил бы понимание лучших способов снова использовать код android UI (даже если по сути строки заголовка должны варьироваться немного между операциями.)
Лично,Вероятно, я бы написал свой подкласс Activity
всегда setContentView
в файл макета, содержащий вертикальный fill_parent
LinearLayout
, содержащий только мою строку заголовка:-
<LinearLayout android:id="@+id/custom_titlebar_container"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<!--titlebar here-->
</LinearLayout>
Затем я бы определил абстрактный getContentAreaLayoutId()
метод в CustomTitlebarActivity
, который возвращает макет ID
содержимого под строкой заголовка для каждого подкласса; базовый onCreate()
CustomTitlebarActivity
будет просто вызывать
setContentView(R.layout.custom_titlebar_activity_frame_from_above);
View.inflate(this, getContentAreaLayoutId(), findViewById(R.id.custom_titlebar_container));
В качестве альтернативы можно получить абстрактный метод для получения области содержимого, возвращающий View
, а не int
, что дает вам больше гибкости для динамического построения ваших представлений (но заставляя вас раздувать их самостоятельно в простом случае просто сбросьте этот макет XML здесь).