web-dev-qa-db-ja.com

Android 5.0のツールバーウィジェットのXMLはどこで定義しますか?

さて、私は今、いくつかの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に入りますか?

8
wasimsandhu

ツールバーは、アプリレイアウト内で使用するためのアクションバーの一般化です。質問に答えるために、2つの方法があります。

悪い習慣:

悪い習慣は、すべてのレイアウトでツールバーを定義することです。

標準的な方法:

標準的な方法は、レイアウトを定義し、基本アクティビティでそれを参照することです。 (<include>を使用して)必要なレイアウトにこのツールバーレイアウトを含め、定義された基本アクティビティをどのアクティビティに拡張するかだけです。

この標準的な方法は、ツールバーの単一のコードベースを維持し、毎回ツールバーを定義する時間を節約するのに役立ちます。

例:Google I/O 2014 Android app

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>
26
Paresh Mayani

私の場合、私は通常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>
2
stackex