如何将android工具栏添加到具有片段

时间:2015-07-05 23:59:51

标签: android android-fragments toolbar

我在Android Studio中创建了一个新项目 - 一个带片段的空白活动。它创建了以下文件

  • MainActivty.java MainActivityFragment.java activity_main.xml fragment_main.xxml

现在我想添加一个工具栏,所以我创建了一个app_bar.xml,如下所示

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/app_bar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

我修改了MainActivity.java,如下所示

public class MainActivity extends AppCompatActivity {

    private Toolbar toolbar;

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

        toolbar = (Toolbar) findViewById(R.id.app_bar);
        this.setSupportActionBar(toolbar);
    }

activity_main.xml中

<fragment xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/fragment"
    android:name="com.lalapetstudios.udacityprojects.spotifystreamer.MainActivityFragment"
    tools:layout="@layout/fragment_main" android:layout_width="match_parent"
    android:layout_height="match_parent" />

fragment.xml之

<RelativeLayout 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:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivityFragment">

    <TextView android:text="@string/hello_world" android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>

当我跑这个。我得到以下异常

  

引起:java.lang.NullPointerException:尝试调用虚拟   方法&#39; java.lang.CharSequence   android.support.v7.widget.Toolbar.getTitle()&#39;在null对象上   参考

所以我修改了我的activity_main.xml,如下所示

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <include
      android:id="@+id/app_bar"
      layout="@layout/app_bar" />

<fragment
        android:id="@+id/fragment"
        android:name="com.lalapetstudios.udacityprojects.spotifystreamer.MainActivityFragment"
        tools:layout="@layout/fragment_main" android:layout_width="match_parent"
        android:layout_height="match_parent" />

    </LinearLayout>

还修改了app_bar.xml,如下所示(删除了android:id参数)

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

现在应用程序运行。我能看到工具栏。但是片段隐藏在工具栏后面。 HelloWorld是工具栏的后面。我如何解决它。谢谢。

1 个答案:

答案 0 :(得分:0)

在activity_main.xml文件中将方向更改为垂直。见下文

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <include
      android:id="@+id/app_bar"
      layout="@layout/app_bar" />

  <fragment
      android:id="@+id/fragment"
      android:name="com.lalapetstudios.udacityprojects.spotifystreamer.MainActivityFragment"
      tools:layout="@layout/fragment_main" android:layout_width="match_parent"
      android:layout_height="match_parent" />

  </LinearLayout>