无法更改工具栏的颜色

3

请问有人能解释一下,为什么我创建了另一个样式,却不能改变工具栏的颜色:

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">false</item>
</style>

我在我的清单文件中加入了它,如下所示:

<activity
    android:name=".SettingsActivity"
    android:label="@string/title_activity_settings"
    android:parentActivityName=".MainActivity">
    <meta-data
        android:theme="@style/AppTheme.NoActionBar"
        android:name="android.support.PARENT_ACTIVITY"
        android:value="com.com.com.com.MainActivity" />
</activity>

尝试更改工具栏,例如:

Toolbar toolbar = new Toolbar(this);
toolbar.setBackgroundColor(getResources().getColor(R.color.light_blue));
setSupportActionBar(toolbar);

但仍然出现以下问题:

该活动已经由窗口装饰提供了操作栏。请勿请求Window.FEATURE_ACTION_BAR并在主题中将windowActionBar设置为false,以使用工具栏。

我甚至尝试过getSupportActionBar().hide();但仍然不起作用。

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="com.com.com.com.SettingsActivity"
    android:id="@+id/settings_activity">
</RelativeLayout>

基本上,我想保留我的全局主题,只是更改一个活动中的工具栏颜色。这就是为什么我不在xml文件中创建工具栏,而是通过编程创建它,添加背景颜色并设置它的原因。


1
主题不应该放在<meta-data>中,而是应该放在开头的<activity>标签中。 - Mike M.
你能否发布包含你想要更改的工具栏元素的 XML 文件? - AntCopp
我认为你首先需要添加 ToolbarrootElement.add(toolbar)。然后将其设置为 setSupportActionBar - Kasim Rangwala
@Ka7Im1011 我添加了 XML 文件,请查看。谢谢。 - Elnoor
4个回答

5

您需要将android:theme="@style/AppTheme.NoActionBar"放在meta-data标签之外:

  <activity
        android:name=".SettingsActivity"
        android:label="@string/title_activity_settings"
        android:theme="@style/AppTheme.NoActionBar"
        android:parentActivityName=".MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value="net.noorr.menote.menote.MainActivity" />
    </activity>

在Java代码中:

Toolbar toolbar = (Toolbar) findViewById(R.id.yourToolbarId);
toolbar.setBackgroundColor(getResources().getColor(R.color.light_blue));
setSupportActionBar(toolbar);

我不想改变整个应用程序的主题,我只想在一个活动中进行更改。 - Elnoor
我做了,但是发生的情况是一个白色的空白屏幕。 - Elnoor
我用另一种方法解决了它,放弃了以编程方式完成。但我的主要问题是我的主题在元标记内,而您的答案让我认为我走向了正确的方向。非常感谢。 - Elnoor

0

我认为你的工具栏获取方式不正确。你可能没有扩展Toolbar类。 尝试直接通过在xml文件中定义的id获取它。

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

然后您可以将其设置为支持,并最终设置您的颜色。

编辑: 没有看到您是通过编程方式创建它。 尝试设置一个简单的AppTheme样式,例如

<style name="NoToolbarStyle" parent="Theme.AppCompat.Light">
    <item name="android:windowActionBar">false</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

嗯,我认为不需要,因为我没有使用findViewById,我会创建一个新的工具栏。 - Elnoor

0
希望以下代码能对您有所帮助...
请按照以下方式在styles.xml中创建主题:
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat">
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">false</item>
</style>

请确保您在gradle依赖项中添加了这个

compile "com.android.support:appcompat-v7:21.0.+"

在您的布局 XML 文件中添加此工具栏标签。
<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>

在你的清单文件中,将你创建的主题添加到活动中。
<activity
        android:name="com.javatechig.sample.MyActivity"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >

最后,这是你的活动

import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.Toolbar;

public class MyActivity extends AppCompatActivity{

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

    // Set a toolbar to replace the action bar.
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
}
}

非常感谢,但它不起作用。ActionBarActivity已被弃用。 - Elnoor
@Elnoor,您说的“不起作用”是指它崩溃了还是工具栏没有显示出来? - ik024
@Elnoor,你可以使用AppCompatActivity而不是ActionBarActivity,我还编辑了答案。请参考http://javatechig.com/android/android-lollipop-toolbar-example获取更多解释。 - ik024
工具栏出现了,但所有的空间都是白色的,甚至通知区域也是。我想保留我的主题,只改变工具栏的颜色。 - Elnoor
我无论如何都使用AppCompatActivity,我提到它是因为它在你的代码中。 - Elnoor
@Elnoor在工具栏标签中更改背景颜色 - ik024

0

这可能会对您有所帮助。

这里的styles.xml包含了自定义主题。

<resources>

<style name="AppBaseTheme" parent="Theme.AppCompat.Light"></style>

<style name="AppTheme" parent="AppBaseTheme"></style>

<style name="CustomTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="colorPrimary">@color/primary</item>
    <item name="colorPrimaryDark">@color/primary_dark</item>
    <item name="colorAccent">@color/accent</item>
</style>


AndroidManifest.xml 包含了 SettingActivity 的自定义主题。

<activity
    android:name=".SettingActivity"
    android:label="@string/title_activity_setting"
    android:theme="@style/CustomTheme" >
</activity>


布局文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/settingRootLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.example.demo.SettingActivity" >

</RelativeLayout>


最后是你的Activity文件

package com.example.demo;

import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
import android.widget.RelativeLayout;

@SuppressLint("NewApi")
public class SettingActivity extends AppCompatActivity {

    private RelativeLayout rootLayout;
    private Toolbar mToolbar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);
        rootLayout = (RelativeLayout) findViewById(R.id.settingRootLayout);
        mToolbar = new Toolbar(this);
        mToolbar.setLayoutParams(
                new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        mToolbar.setBackgroundColor(getResources().getColor(R.color.light_blue));
        mToolbar.setFitsSystemWindows(true);
        rootLayout.addView(mToolbar);
        setSupportActionBar(mToolbar);
    }

}

仍然无法工作@Ka7Im1011。我得到了白色的通知区域。 - Elnoor

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