Android 工具栏中未显示标题等内容

16

我刚刚为我正在开发的一个应用程序添加了Android工具栏。 工具栏的放置位置正确,工具栏布局出现在显示器的顶部。 但是,工具栏显示为一个空白的彩色条,应用程序标题和溢出图标不显示在工具栏中。 有没有解决方法?

ToolbarActivity.java:

public abstract class ToolbarActivity extends ActionBarActivity {

private Toolbar toolbar;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_home);
    toolbar = (Toolbar) findViewById(R.id.toolbar); 
    if (toolbar != null) {
        setSupportActionBar(toolbar);
        getSupportActionBar().setHomeButtonEnabled(true); 
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    toolbar.setTitle("app name");
    }
}

工具栏.xml:

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

menu_main.xml:
<menu 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"
tools:context=".MainActivity">
<item android:id="@+id/action_settings"
    android:title="@string/action_settings"
    android:orderInCategory="100"
    app:showAsAction="always" />
</menu>

样式.xml:

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
      <item name="windowActionBar">false</item>
      <item name="android:windowNoTitle">true</item>
      <item name="colorPrimary">@color/ColorPrimary</item>
      <item name="colorPrimaryDark">@color/ColorPrimaryDark</item>
</style>

https://dev59.com/PV8d5IYBdhLWcg3wv0Ug#32582780 - Pratik Butani
3个回答

28

编辑:好的,所以这需要以完全不同的方式设置才能正常工作。我假设(因为我之前没怎么使用过ToolBar),当使用setActionBar(toolbar)时它会自动把自定义的ToolBar添加到内容视图中 - 但实际情况并非如此。

所以最大的问题是ToolBar从未添加到当前的内容视图中,因此在您实际添加ToolBar到当前内容视图之前,它永远不会可见。

有不同的方法,但我只会展示其中一种。

您应该将ToolBar直接添加到Activity的布局文件中,而不是拥有一个toolbar.xml文件。

这里是一个Activity类及其XML示例代码:

MainActivity.java

public class MainActivity extends ActionBarActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        if(toolbar != null) {
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("My custom toolbar!");
            getSupportActionBar().setHomeButtonEnabled(true);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        }
    }
}

activity_main.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"
    tools:context=".MainActivity">

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

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

</RelativeLayout>

你的styles.xml文件是正确的。

需要注意的是,将ActionBar设置为自定义ToolBar后,使用默认方法更改ActionBar外观非常重要。例如,设置标题应该从getSupportActionBar().setTitle()而不是从toolbar.setTitle()中进行设置。


啊,我明白了。我使用了你建议的代码进行了扩展,工具栏显示正常。但是工具栏仍然是空白的,只是一个有颜色的条形区域。你有什么想法吗? - AJW
@user3796660 我完全改变了我的答案 - 我不得不稍微挖掘一下,但是现在上面的代码应该可以正常工作了 - 请与您自己的代码一起使用 :-) 在我看来,如何实现 ToolBar 以将其用作 ActionBar 有点令人困惑... - Darwind
我遇到了这个错误:“此 Activity 已经有一个由窗口装饰提供的操作栏。请勿请求 Window.FEATURE_ACTION_BAR 并在您的主题中将 windowActionBar 设置为 false,以使用 Toolbar。” 我该怎么办? - pilat
@pilat 请查看您的 style.xml 文件。您应该在当前活动的 Style 中设置 <item name="windowActionBar">false</item> - Darwind
哦,我的天啊!太感谢了!我找了好久才找到这个解决方案! - Albert.tomasiak
显示剩余3条评论

2
Tutorial: http://www.viralandroid.com/2015/08/android-toolbar-example.html styles.xml
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    ...
  <!-- Customize your theme here. -->
</style>

布局文件
<android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:minHeight="?attr/actionBarSize"
        android:background="#2196F3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
    </android.support.v7.widget.Toolbar>

java

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

0
在清单文件中,添加以下内容...
 <activity android:name=".Activity.ToolbarActivity"
            android:label="@string/yourStringTitle"
            />

希望这能有所帮助


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接