有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java无法更改工具栏的颜色

任何人都可以解释一下,为什么我的工具栏没有改变颜色,即使我创建了另一种样式,如:

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

将其添加到我的清单文件中,如:

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

并尝试更改工具栏,如:

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

但仍然得到

This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.

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

XML:

<RelativeLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    xmlns:tools="http://schemas.安卓.com/tools" 安卓:layout_width="match_parent"
    安卓:layout_height="match_parent" 安卓:paddingLeft="@dimen/activity_horizontal_margin"
    安卓:paddingRight="@dimen/activity_horizontal_margin"
    安卓:paddingTop="@dimen/activity_vertical_margin"
    安卓:paddingBottom="@dimen/activity_vertical_margin"
    tools:context="com.com.com.com.SettingsActivity"
    安卓:id="@+id/settings_activity">
</RelativeLayout>

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


共 (4) 个答案

  1. # 1 楼答案

    我认为你的工具栏弄错了。您可能没有扩展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>
    
  2. # 2 楼答案

    希望下面的代码能帮助你

    在样式中创建主题。xml格式如下:

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat">
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
    </style>
    

    确保你的gradle dependencies中有这个

    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>
    

    在清单文件中,将创建的主题添加到acctivity

    <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);
    }
    }
    
  3. # 3 楼答案

    您需要在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);
    
  4. # 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>
    


    最后是您的活动文件

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