Где определить XML для виджета панели инструментов в Android 5.0?

Хорошо, я просмотрел несколько сообщений StackOverflow, но я все еще не понимаю, куда идет этот xml для моей панели инструментов.

<android.support.v7.widget.Toolbar
android:id=”@+id/my_awesome_toolbar”
android:layout_height=”wrap_content”
android:layout_width=”match_parent”
android:background=”@styles/colorPrimary” />

Это входит в мой /layout/activity_main.xml?


person wasimsandhu    schedule 03.11.2014    source источник


Ответы (2)


Панель инструментов — это обобщение панелей действий для использования в макетах приложений. Теперь, чтобы ответить на ваш вопрос, есть две практики:

Плохая практика:

Плохая практика — определять панель инструментов в каждом макете.

Стандартная практика:

Стандартной практикой является определение макета и ссылка на него в базовой активности. Вам просто нужно включить этот макет панели инструментов в любой макет, который вы хотите (используя <include>), и расширить определенное базовое действие в любом действии.

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

Пример: приложение Google I/O 2014 для Android

toolbar_actionbar_with_headerbar.xml

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:iosched="http://schemas.android.com/apk/res-auto"
    style="@style/HeaderBar"
    iosched:theme="@style/ActionBarThemeOverlay"
    iosched:popupTheme="@style/ActionBarPopupThemeOverlay"
    android:id="@+id/toolbar_actionbar"
    iosched:titleTextAppearance="@style/ActionBar.TitleText"
    iosched:contentInsetStart="?actionBarInsetStart"
    android:layout_width="match_parent"
    android:layout_height="?actionBarSize" />

На этот макет панели инструментов ссылаются в настройках, как показано ниже:

activity_settings.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".ui.SettingsActivity">

    <include layout="@layout/toolbar_actionbar_with_headerbar" />

    <FrameLayout
        android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1" />
</LinearLayout>
person Paresh Mayani    schedule 03.11.2014
comment
Полезный и очень информативный ответ. Спасибо, что помогли мне понять это! - person wasimsandhu; 04.11.2014
comment
@awkwardgiraffe добро пожаловать и ура! Google I/O — лучшее приложение с открытым исходным кодом для изучения новых стилей, реализованных руководств и кода. - person Paresh Mayani; 04.11.2014
comment
@PareshMayani не могли бы вы помочь мне с этим? stackoverflow.com/questions/26903014/ - person LOG_TAG; 13.11.2014
comment
@LOG_TAG хм, я не сталкивался с этой проблемой, так что понятия не имею! - person Paresh Mayani; 13.11.2014
comment
Тег включения axml — правильный подход для тех, кто не любит унаследованные макеты. - person MLProgrammer-CiM; 09.02.2015
comment
@MLProgrammer-CiM согласен! - person Paresh Mayani; 10.02.2015

Что касается меня, я обычно делаю ToolbarActivity. Далее, если вы хотите, чтобы ваша активность имела панель инструментов, вам просто нужно YourActivity extends ToolbarActivity.

public class ToolbarActivity extends AppCompatActivity {

    @Override
    public void setContentView(int layoutResID) {
        super.setContentView(R.layout.activity_toolbar);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        LayoutInflater inflater = LayoutInflater.from(this);
        View contentView = inflater.inflate(layoutResID, null);

        LinearLayout layout = (LinearLayout) findViewById(R.id.layout);
        layout.addView(contentView, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    }
}

XML:

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id="@+id/layout"
    tools:context=".ToolbarActivity" >

    <android.support.v7.widget.Toolbar
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        android:layout_height="wrap_content"
        android:layout_width="match_parent"
        android:minHeight="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        android:id="@+id/toolbar" />

</LinearLayout>
person stackex    schedule 17.06.2015