当DrawerLayout的一部分时,标题不显示在工具栏中

时间:2016-03-11 09:54:37

标签: android android-layout

我是Android编程的新手。 我正在尝试复制我的IOS应用程序,同时学习绳索。 我没有使用Android Studio向导来创建任何活动 - 手动完成所有操作,以便我了解发生了什么。

我使用DrawerLayout和工具栏设置了AppCompat活动。 最初,在我注意到DrawerLayout的存在之前,我使用RelativeLayout设置了相同的整体设计。

虽然我的工具栏位于相对布局中,但我可以毫无问题地设置其标题。

当我替换RelativeLayout并将工具栏放在DrawerLayout中时,标题停止显示。

我可以在调试器中看到标题设置正确,它只是没有出现。

我目前已将ActionBarDrawerToggle与DrawerLayout捆绑在一起。 以前,我没有使用ActionBarDrawerToggle。 在这两种情况下,工具栏标题都不显示。

如果我恢复RelativeLayout,标题会再次显示。

我已经搜索到了SO,但无法找到解决方案。

活动的布局是:

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
                                    android:layout_width="match_parent"
                                    android:layout_height="match_parent"
                                    android:id="@+id/app_drawer">

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

<FrameLayout
    android:id="@+id/fragment_items_list_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/white"
    android:layout_marginTop="52dp"
    />


<LinearLayout
    android:orientation="vertical"
    android:layout_width="256dp"
    android:layout_height="match_parent"
    android:background="@color/lightGray"
    android:id="@+id/fragment_nav_list_container"
    android:layout_gravity="start"
    />

工具栏的布局是:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
                               android:id="@+id/toolbar"
                               android:layout_height="52dp"
                               android:layout_width="match_parent"
                               android:minHeight="52dp"
                               android:background="?attr/colorPrimary">

<TextView
    android:id="@+id/toolbar_title"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal"
    android:text="App Title"
    android:gravity="center"
    android:textColor="#ffffff"
    android:textSize="20dp"
    android:textStyle="bold"
    android:background="@color/red"
    />

活动代码是:

import android.app.Activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.TextView;


import DatabaseMaster;


public class MainWrapperActivity extends AppCompatActivity {

    class MainWrapperDrawerToggle extends ActionBarDrawerToggle {

        public MainWrapperDrawerToggle(Activity activity, DrawerLayout drawerLayout, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
            super(activity, drawerLayout, openDrawerContentDescRes, closeDrawerContentDescRes);
        }

        public MainWrapperDrawerToggle(Activity activity, DrawerLayout drawerLayout, Toolbar toolbar, int openDrawerContentDescRes, int closeDrawerContentDescRes) {
            super(activity, drawerLayout, toolbar, openDrawerContentDescRes, closeDrawerContentDescRes);
        }

        // Drawer Listener

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView,slideOffset);

            Log.d("debug","Main App Drawer: SLIDE");
        }

        @Override
        public void onDrawerOpened(View drawerView) {
            super.onDrawerOpened(drawerView);

            Log.d("debug","Main App Drawer: OPENED");
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);

            Log.d("debug","Main App Drawer: CLOSED");
        }

        @Override
        public void onDrawerStateChanged(int newState) {
            super.onDrawerStateChanged(newState);

            Log.d("debug", "Main App Drawer: STATE CHANGED: " + newState);
        }

    }


    private MainWrapperDrawerToggle mActionBarDrawerToggle;
    private DrawerLayout mDrawerLayout;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main_wrapper);

        // Add / Configure Toolbar
        mToolbar=(Toolbar)findViewById(R.id.toolbar);
        setSupportActionBar(mToolbar);

        // Setup App Drawer
        mDrawerLayout=(DrawerLayout)findViewById(R.id.app_drawer);
        mActionBarDrawerToggle=new MainWrapperDrawerToggle(this,mDrawerLayout,mToolbar,R.string.app_name,R.string.app_name);
        mDrawerLayout.addDrawerListener(mActionBarDrawerToggle);

        //getSupportActionBar().setHomeButtonEnabled(true);
        //getSupportActionBar().setDisplayShowTitleEnabled(false);

        //mActionBarDrawerToggle.setHomeAsUpIndicator(R.drawable.ic_nav_menu);

        // Add Fragment(s)
        FragmentManager fm=getSupportFragmentManager();

        // Check for existing fragment by the ID of its Container
        Fragment fragment=fm.findFragmentById(R.id.fragment_items_list_container);

        if (fragment == null) {
            fragment=new SectionsListFragment();

            // Add fragment to it's Container
            fm.beginTransaction().add(R.id.fragment_items_list_container,fragment).commit();
        }

    }


    @Override
    protected void onPostCreate (Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);

        mActionBarDrawerToggle.syncState();
        mToolbar.setNavigationIcon(R.drawable.ic_nav_menu);
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);

        mActionBarDrawerToggle.onConfigurationChanged(newConfig);
    }

    @Override
    protected void onStart () {
        super.onStart();

    }

    @Override
    protected void onResume () {
        super.onResume();

        TextView toolbarTitleView=(TextView)mToolbar.findViewById(R.id.toolbar_title);
        toolbarTitleView.setText(R.string.app_name);
    }

    @Override
    protected void onDestroy () {
        DatabaseMaster.getInstance().getRealm().close();
        DatabaseMaster.getInstance().setRealm(null);

        super.onDestroy();
    }

    @Override
    public boolean onSupportNavigateUp () {
        Log.i("debug", "Toggling hamburger menu");

        if (mDrawerLayout.isDrawerOpen(GravityCompat.START)) {
            mDrawerLayout.closeDrawer(GravityCompat.START);
        } else {
            mDrawerLayout.openDrawer(GravityCompat.START);
        }

        return false;
    }

}

1 个答案:

答案 0 :(得分:4)

DrawerLayout只包含两个子项,即只有两个布局。您可以将 FrameLayout 替换为另一个 RelativeLayout ,并将 FrameLayout 并将标记包含在新的 RelativeLayout 中。

<android.support.v4.widget.DrawerLayout   xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/app_drawer">

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

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="256dp"
            android:layout_height="match_parent"
            android:background="@color/lightGray"
            android:id="@+id/fragment_nav_list_container"
            android:layout_gravity="start"/>

</android.support.v4.widget.DrawerLayout>

在相对布局中使用此

<RelativeLayout 
            android:id="@+id/new_container"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

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

    <FrameLayout
        android:id="@+id/fragment_items_list_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"/>

</RelativeLayout>

休息很好。希望这个帮助。