在工具栏上添加汉堡图标时,应用崩溃

时间:2018-07-09 13:18:43

标签: android android-studio

我在工具栏的左端添加了一个汉堡图标,但是当我运行它时,应用崩溃了

这是我的xml文件

<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"

    android:orientation="vertical">

    <android.support.design.widget.AppBarLayout
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/abc_action_bar_default_height_material"
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">


<android.support.v7.widget.Toolbar
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text="Test"
        android:background="@color/colorPrimary"
        android:textColor="@color/black"
        android:textSize="18dp"
        android:gravity="center"/>
</android.support.v7.widget.Toolbar>


</android.support.design.widget.AppBarLayout>

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- Real content goes here -->
        <FrameLayout
            android:id="@+id/content"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:textColor="@color/black"
                android:text="Test"/>
        </FrameLayout>

        <!-- The navigation drawer -->
        <android.support.design.widget.NavigationView
            android:id="@+id/navigation"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_gravity="start"
            app:headerLayout="@layout/navigation_header"
            app:menu="@menu/navigation_menu"/>

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

这是我的java类

import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.Toolbar;

public class test extends AppCompatActivity {

    private DrawerLayout sideBar;
    private ActionBarDrawerToggle sideBarToggle;
    private Toolbar actionToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_test);

        /* Side Bar */
        actionToolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(actionToolbar);
        sideBar = (DrawerLayout) findViewById(R.id.navigation);
        sideBarToggle = new ActionBarDrawerToggle(this, sideBar,  R.string.Open, R.string.Close);
        sideBar.addDrawerListener(sideBarToggle);
        sideBarToggle.syncState();
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);


    }
}

它与我的自定义工具栏有冲突吗?

我不知道出了什么问题,我试图在各处搜索,但仍然没有运气。我不知道要修复什么或在哪里修复。 thnx,为将来提供帮助

已更新

 <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/toolbar"
        >

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="@dimen/abc_action_bar_default_height_material"
            android:background="?attr/colorPrimary"
            android:theme="@style/Theme.AppCompat.DayNight.NoActionBar">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:background="@color/colorPrimary"
                android:gravity="center"
                android:text="Test"
                android:textColor="@color/black"
                android:textSize="18dp" />


        </android.support.design.widget.AppBarLayout>
    </android.support.v7.widget.Toolbar>

添加了style.xml

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources>

4 个答案:

答案 0 :(得分:2)

style.xml

<resources>

    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>

</resources> 

main_activity.xml

   <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context="im.opriday.customlistview.MainActivity">

        <android.support.design.widget.AppBarLayout
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize">
            <android.support.v7.widget.Toolbar
                android:id="@+id/toolbr"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

        </android.support.design.widget.AppBarLayout>


    </RelativeLayout>

MainActivity

导入android.support.v7.widget.Toolbar而不是导入android.widget.Toolbar

 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbr);
        setSupportActionBar(toolbar);
        getSupportActionBar().setTitle("Hello");
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setHomeAsUpIndicator(R.drawable.ic_menu_black_24dp);
}

enter image description here

答案 1 :(得分:0)

此代码正确。不需要额外的TextView

<android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="@dimen/abc_action_bar_default_height_material"
        android:background="?attr/colorPrimary"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

          <android.support.v7.widget.Toolbar
             android:id="@+id/toolbar"
             android:layout_width="match_parent"
             android:layout_height="match_parent"/>

</android.support.design.widget.AppBarLayout>

答案 2 :(得分:0)

您没有在代码中引用的工具栏提到的标识符(android:id="@+id/toolbar")。由于找不到,它将返回异常。

<android.support.design.widget.AppBarLayout
   android:id="@+id/appBarLayout"
   android:layout_width="match_parent"
   android:layout_height="wrap_content"
   android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
    <android.support.v7.widget.Toolbar
     android:layout_width="match_parent"
     android:id="@+id/toolbar"                 <!---missing-->
     android:layout_height="200dp">
<TextView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:text="Test"
    android:background="@color/colorPrimary"
    android:textColor="@color/black"
    android:textSize="18dp"
    android:gravity="center"/>
  </android.support.v7.widget.Toolbar>
 </android.support.design.widget.AppBarLayout>

您的style.xml应该具有像ThemeOverlay.AppCompat.Dark.ActionBar这样的ActionBar父级,而不是像现在那样具有NoActionBar

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="ThemeOverlay.AppCompat.Dark.ActionBar">

请按照本教程的指导link

答案 3 :(得分:0)

您的布局必须按此顺序。

<DrawerLayout> 
  <AppBarLayout>
    <Toolbar>
   // Toolbar content
    </Toolbar>
  </AppBarLayout>
  <NavigationView />
</DrawerLayout>

如果要使用默认汉堡包菜单,则需要在ActionBarDraweToggle构造函数参数中包含工具栏。

   sideBarToggle = new ActionBarDrawerToggle(this, sideBar, actionToolbar , R.string.Open, R.string.Close);