web-dev-qa-db-ja.com

ナビゲーションドロワーでAppcompatツールバーが表示されない

私は自分のアプリで以下を設定しようとしています:

  • ツールバー(Appcompat v7バージョン)
  • ナビゲーション引き出し
  • Pre-LollipopAppcompat v7 Materialテーマ

ここの手順に従いました: http://Android-developers.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html

ただし、テーマで.NoActionBarを宣言し、ツールバーをレイアウトに配置した後、私のツールバーは表示されません。最終的に私が得るのは、アクションバーなし、アクションバーなしを宣言するときに期待するものです。レイアウトは次のとおりです。

<Android.support.v4.widget.DrawerLayout 
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    Android:orientation="vertical"
    tools:context=".MainActivity">

<!-- Toolbar -->
<include layout="@layout/toolbar"/>

<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/layout_main"
    Android:layout_width="match_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical">

    <Spinner
        Android:id="@+id/spinner_main"
        Android:visibility="gone"
        Android:textAlignment="center"
        Android:gravity="center"
        Android:layout_gravity="center_horizontal"
        Android:entries="@array/error_loading_content_array"
        Android:layout_width="fill_parent"
        Android:layout_height="wrap_content"/>

    <FrameLayout
        Android:id="@+id/container"
        Android:layout_weight="1"
        Android:layout_width="match_parent"
        Android:layout_height="0px"></FrameLayout>

</LinearLayout>

<fragment
    Android:id="@+id/navigation_drawer"
    Android:layout_width="@dimen/navigation_drawer_width"
    Android:layout_height="match_parent"
    Android:layout_gravity="start"
    Android:name=".NavigationDrawerFragment"
    tools:layout="@layout/fragment_navigation_drawer"/>

Toolbar.xml:

<Android.support.v7.widget.Toolbar
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:app="http://schemas.Android.com/apk/res-auto"
Android:id="@+id/toolbar"
app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
Android:minHeight="?attr/actionBarSize"
Android:background="?attr/colorPrimary"
Android:layout_width="fill_parent"
Android:layout_height="wrap_content"/>

MainActivity.Javaの場合:

// Load view/layout
setContentView(R.layout.guidelib_activity_main);

// TODO: Toolbar not showing
mToolbar = (Toolbar)findViewById(R.id.toolbar);
setSupportActionBar(mToolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setHomeButtonEnabled(true);

ソリューション

<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/linearlayout_root_main"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent">

    <Android.support.v4.widget.DrawerLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        xmlns:tools="http://schemas.Android.com/tools"
        Android:id="@+id/drawer_layout"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        tools:context=".MainActivity">

        <LinearLayout
            Android:id="@+id/layout_main"
            Android:layout_width="match_parent"
            Android:layout_height="match_parent"
            Android:orientation="vertical">

            <!-- Toolbar -->
            <!-- Moved up to new LinearLayout root tag -->
            <!--<include layout="@layout/toolbar"/>-->
            ... 
22
user1234

DrawerLayoutはFrameLayoutを拡張しますが、それをLinearLayoutのように扱っています。タグと次のLinearLayoutを別のLinearLayoutでラップするか、タグを移動できます。

また、「fill_parent」は廃止され、「match_parent」にマッピングされるため、「match_parent」のみを使用する必要があります。 LinearLayout要素内の追加のxmlns属性を削除することもできます。

<Android.support.v4.widget.DrawerLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android"
    xmlns:tools="http://schemas.Android.com/tools"
    Android:id="@+id/drawer_layout"
    Android:layout_width="match_parent"
    Android:layout_height="match_parent"
    tools:context=".MainActivity">

    <LinearLayout
        Android:id="@+id/layout_main"
        Android:layout_width="match_parent"
        Android:layout_height="match_parent"
        Android:orientation="vertical">

            <!-- Toolbar -->
            <include layout="@layout/toolbar"/>
            ...

ツールバーがLinearLayoutの背後に隠れている(zオーダー)ため、元のレイアウトは機能しませんでした。

38
alanv