Android 工具栏向上推到顶部状态栏后面

Android Toolbar pushed up behind the top status bar

我最近将我的 phone 更新为 Android 5.0.2,我正在开发的应用程序现在有一个出现故障的工具栏。工具栏向上推,部分被最顶部的状态栏隐藏。

什么会导致这个问题?

这是 Activity 的代码,它具有处理工具栏的布局

public class LeftMenusActivity extends ActionBarActivity implements FeedFragment.OnFragmentInteractionListener, UserFragment.OnFragmentInteractionListener,
        SettingsFragment.OnFragmentInteractionListener, CreateFragment.OnFragmentInteractionListener, TimersFragment.OnFragmentInteractionListener,
        CalendarFragment.OnFragmentInteractionListener, DetailFragment.OnFragmentInteractionListener, SingleWorkoutItemDetailFragment.OnFragmentInteractionListener {

    public static final String LEFT_MENU_OPTION = "com.modup.app.LeftMenusActivity";
    public static final String LEFT_MENU_OPTION_1 = "Left Menu Option 1";
    public static final String LEFT_MENU_OPTION_2 = "Left Menu Option 2";

    private ListView mDrawerList;
    private List<DrawerItem> mDrawerItems;
    private DrawerLayout mDrawerLayout;
    private ActionBarDrawerToggle mDrawerToggle;

    private CharSequence mDrawerTitle;
    private CharSequence mTitle;
    private SingleWorkout currentSingleWorkoutObject;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_left_menus);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mTitle = mDrawerTitle = getTitle();
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList = (ListView) findViewById(R.id.list_view);

        mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
        prepareNavigationDrawerItems();
        setAdapter();
        //mDrawerList.setAdapter(new DrawerAdapter(this, mDrawerItems));
        mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout, toolbar,
                R.string.drawer_open,
                R.string.drawer_close) {
            public void onDrawerClosed(View view) {
                getSupportActionBar().setTitle(mTitle);
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                getSupportActionBar().setTitle(mDrawerTitle);
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);

        if (savedInstanceState == null) {
            mDrawerLayout.closeDrawer(mDrawerList);
            FragmentManager fragmentManager = getFragmentManager();
            Fragment mFragment = new FeedFragment();
            fragmentManager.beginTransaction().replace(R.id.content_frame, mFragment).commit();

        }
    }

    private void setAdapter() {
        String option = LEFT_MENU_OPTION_1;
        Bundle extras = getIntent().getExtras();
        if (extras != null && extras.containsKey(LEFT_MENU_OPTION)) {
            option = extras.getString(LEFT_MENU_OPTION, LEFT_MENU_OPTION_1);
        }

        boolean isFirstType = true;

        View headerView = null;
        if (option.equals(LEFT_MENU_OPTION_1)) {
            headerView = prepareHeaderView(R.layout.header_navigation_drawer_1,
                    "http://pengaja.com/uiapptemplate/avatars/0.jpg",
                    "dev@csform.com");
        } else if (option.equals(LEFT_MENU_OPTION_2)) {
            headerView = prepareHeaderView(R.layout.header_navigation_drawer_2,
                    "http://pengaja.com/uiapptemplate/avatars/0.jpg",
                    "dev@csform.com");
            isFirstType = false;
        }

        BaseAdapter adapter = new DrawerAdapter(this, mDrawerItems, isFirstType);

        mDrawerList.addHeaderView(headerView);//Add header before adapter (for pre-KitKat)
        mDrawerList.setAdapter(adapter);
    }

    private View prepareHeaderView(int layoutRes, String url, String email) {
        View headerView = getLayoutInflater().inflate(layoutRes, mDrawerList, false);
        ImageView iv = (ImageView) headerView.findViewById(R.id.imageViewProfilePic);
        TextView tv = (TextView) headerView.findViewById(R.id.email);

        ImageUtil.displayRoundImage(iv, url, null);
        tv.setText(ParseUser.getCurrentUser().getEmail());

        return headerView;
    }

    private void prepareNavigationDrawerItems() {
        mDrawerItems = new ArrayList<DrawerItem>();
        mDrawerItems.add(
                new DrawerItem(
                        R.drawable.feed,
                        R.string.drawer_title_feed,
                        DrawerItem.DRAWER_ITEM_TAG_FEED));
        mDrawerItems.add(
                new DrawerItem(
                        R.drawable.user,
                        R.string.drawer_title_user,
                        DrawerItem.DRAWER_ITEM_TAG_USER));
        mDrawerItems.add(
                new DrawerItem(
                        R.drawable.stopwatch,
                        R.string.drawer_title_timers,
                        DrawerItem.DRAWER_ITEM_TAG_TIMERS));
        mDrawerItems.add(
                new DrawerItem(
                        R.drawable.calendar,
                        R.string.drawer_title_calendar,
                        DrawerItem.DRAWER_ITEM_TAG_CALENDAR));


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.main, menu);
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        return super.onPrepareOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        if (mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public void onFragmentInteraction(Uri uri) {

    }

    private class DrawerItemClickListener implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,
                                long id) {
            selectItem(position/*, mDrawerItems.get(position - 1).getTag()*/);
        }
    }

    //set up fragment switching here
    private void selectItem(int position/*, int drawerTag*/) {
        // minus 1 because we have header that has 0 position
        FragmentManager fragmentManager = getFragmentManager();
        Fragment mFragment;
        if (position < 1) { //because we have header, we skip clicking on it
            return;
        }
        switch (position) {
            case 1:
                mFragment = new FeedFragment();
                fragmentManager.beginTransaction().replace(R.id.content_frame, mFragment).commit();
                break;
            case 2:
                mFragment = new UserFragment();
                fragmentManager.beginTransaction().replace(R.id.content_frame, mFragment).commit();
                break;
            case 3:
                mFragment = new TimersFragment();
                fragmentManager.beginTransaction().replace(R.id.content_frame, mFragment).commit();
                break;
            case 4:
                mFragment = new CalendarFragment();
                fragmentManager.beginTransaction().replace(R.id.content_frame, mFragment).commit();
                break;
        }
/*      String drawerTitle = getString(mDrawerItems.get(position - 1).getTitle());
        Toast.makeText(this, "You selected " + drawerTitle + " at position: " + position, Toast.LENGTH_SHORT).show();*/

        mDrawerList.setItemChecked(position, true);
        setTitle(mDrawerItems.get(position - 1).getTitle());
        mDrawerLayout.closeDrawer(mDrawerList);
    }

    @Override
    public void setTitle(int titleId) {
        setTitle(getString(titleId));
    }

    @Override
    public void setTitle(CharSequence title) {
        mTitle = title;
        getSupportActionBar().setTitle(mTitle);
    }

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

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

}

XML布局

<?xml version="1.0"?>
<LinearLayout android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent"
              xmlns:android="http://schemas.android.com/apk/res/android">
    <include layout="@layout/toolbar"/>

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


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

        <include android:layout_height="match_parent" android:layout_width="@dimen/drawer_width"
                 layout="@layout/list_view" android:layout_gravity="start"/>

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

</LinearLayout>

XML 工具栏布局

<?xml version="1.0" encoding="utf-8"?>


    <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"
                                       android:layout_width="match_parent"
                                       android:layout_height="56dp"
                                       android:elevation="4dp"
                                       android:background="@color/primary_blue"
                                       app:popupTheme="@style/Theme.AppCompat.Light.DarkActionBar"
                                       app:theme="@style/AppTheme.Title"/>

删除 android:fitsSystemWindows="true" 或将工具栏移动到 DrawerLayout 中的第一个元素内(添加 LL,因为 DrawerLayout 内部有 2 个视图)。