Android - Добавление кнопок в заголовок

Подскажите, пожалуйста, как добавить кнопки в заголовок.

  • Полностью удалите заголовок и создайте собственный заголовок, например, с помощью ImageView.

or

  • Используйте другой подход

Моя цель чем-то похожа на приложение Facebook введите здесь описание изображения

ОБНОВЛЕНИЕ: уровень API >= 10


person Shlomi Schwartz    schedule 28.05.2013    source источник
comment
Обычно я создаю свою собственную строку заголовка, поэтому я могу добавлять кнопки, значок состояния... Нужно закодировать свою собственную ViewGroup.   -  person Seraphim's    schedule 28.05.2013
comment
Спасибо за ответ ... Мне было интересно, лучший ли это подход?   -  person Shlomi Schwartz    schedule 28.05.2013


Ответы (2)


Я думаю, лучше всего использовать панель действий Android. Предпочитайте меню действий вместо кнопок в настраиваемой строке заголовка.

См.: Дано меню действий обновления и редактирования

А для дальнейшей реализации панели действий см.:

  1. http://www.vogella.com/articles/AndroidActionBar/article.html
  2. developer.android.com/guide/topics/ui/actionbar.html‎
person Prat    schedule 28.05.2013
comment
Спасибо за ответ, я обновил свой вопрос ... Уровень API 10 - моя минимальная версия. - person Shlomi Schwartz; 28.05.2013
comment
Ага..! Есть возможность предоставить поддержку уровня API 8, вы можете использовать библиотеку SherlockActionbar. Пожалуйста, загрузите библиотеку с: actionbarsherlock.com - person Prat; 28.05.2013

В моем решении используется пользовательская ViewGroup (из RelativeLayout), поэтому я могу использовать ее в различных действиях без копирования и вставки xml. Это простой пример обновления текстового представления заголовком. Вы можете добавить кнопки в относительный макет и заставить их работать так, как вам нужно.

Но если у вас есть только действие, лучше включить его в качестве вспомогательного макета основного макета вашего действия

public class StatusBar extends RelativeLayout {

private TextView textViewTitle;

    public StatusBar(Context context, AttributeSet attrs) {
LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layoutInflater.inflate(R.layout.ui_status_bar, this, true);
        super(context, attrs);
}

@Override
    public void onFinishInflate() {
        super.onFinishInflate();

        textViewTitle = (TextView) findViewById(R.id.textViewTitle);
}

private void updateStatusBar(String title) {
this.textViewTitle.setText(title)
}
}

И ui_status_bar.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/theme_color_darker"
    android:gravity="center_vertical" >

    <TextView
        android:id="@+id/textViewTitle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_centerVertical="true"
        android:layout_marginLeft="5dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold" />

</RelativeLayout>

в своей деятельности вы можете использовать его следующим образом:

<com.uicomponents.statusbar.StatusBar
    android:id="@+id/statusBar"
    style="@style/status_bar" />

person Seraphim's    schedule 28.05.2013
comment
Спасибо за ответ. Просто чтобы было понятно: R.layout.ui_status_bar является ссылкой на XML? можно немного уточнить? - person Shlomi Schwartz; 28.05.2013
comment
Это сложно объяснить, если у вас нет опыта работы с custom View и viewGroups. layout.ui_status_bar.xml попадает в папку layout/ в проекте Android. при компиляции этот макет может быть загружен по его ссылке из ресурсов (например, R.layout.ui_status_bar), как вы загружаете макет для активности. - person Seraphim's; 28.05.2013