【问题标题】:Can't change the color of toolbar无法更改工具栏的颜色
【发布时间】:2015-11-15 10:15:52
【问题描述】:

谁能解释一下,为什么我的工具栏没有改变它的颜色,即使我创建了另一种样式:

<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);

但还是得到了

这个 Activity 已经有一个由窗口装饰提供的操作栏。 不要请求 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 文件中创建工具栏的原因,我以编程方式创建它,添加背景颜色并想要设置它。

【问题讨论】:

  • 主题不在&lt;meta-data&gt;中。它出现在开头&lt;activity&gt;。标记。
  • 您能否发布您的 xml 文件以及您想要更改的工具栏元素?
  • 我想,你首先需要添加Toolbar。 rootElement.add(toolbar)。而不是将其设置为setSupportActionBar。
  • @Ka7Im1011 我添加了xml文件,请检查。谢谢

标签: java android android-actionbar toolbar


【解决方案1】:

你需要在meta-data标签之外去掉android:theme="@style/AppTheme.NoActionBar":

  <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);

【讨论】:

  • 我不想更改我的整个应用程序主题。我只想更改一项活动
  • 我做到了,但发生的是白色空白屏幕
  • 我用另一种方式解决了它,放弃了以编程方式进行。但我的主要问题是我的主题在元标签内,你的回答让我朝着我认为的正确方向前进。非常感谢。
【解决方案2】:

我认为您以错误的方式获取工具栏。您可能没有扩展 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>

【讨论】:

  • 嗯,我想不,因为我没有找到ViewById,所以我创建了新工具栏
【解决方案3】:

希望下面的代码对您有所帮助...

在你的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 除了 ActionBarActivity,您还可以使用 AppCompatActivity,也已编辑 ans。萌解释请参考javatechig.com/android/android-lollipop-toolbar-example
  • 工具栏出现但所有空白事件通知区域。我想保留我的主题并更改工具栏颜色
  • 无论如何我都使用 AppCompatActivity,我提到它是因为它在您的代码中
【解决方案4】:

这可能会对你有所帮助。

这里的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>


Layout 文件

<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。我得到白色通知区域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
相关资源
最近更新 更多