106

在我的 android 应用程序中,我希望标准/基本标题栏改变颜色。

要更改您拥有的文本颜色setTitleColor(int color),有没有办法更改栏的背景颜色?

4

13 回答 13

188

主题将帮助您开始在 xml 文件中构建自己的标题栏并在您的活动中使用它

编辑

这里简单总结一下上面链接的内容——这只是设置文本的颜色和标题栏的背景——没有调整大小,没有按钮,只是最简单的示例

res/layout/mytitle.xml - 这是代表​​标题栏的视图

<?xml version="1.0" encoding="utf-8"?>
<TextView
  xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/myTitle"
  android:text="This is my new title"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:textColor="@color/titletextcolor"
   />

res/values/themes.xml - 我们想保留默认的android主题,只需要改变标题背景的背景颜色。所以我们创建一个继承默认主题的主题,并将背景样式设置为我们自己的样式。

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="customTheme" parent="android:Theme"> 
        <item name="android:windowTitleBackgroundStyle">@style/WindowTitleBackground</item>   
    </style> 
</resources>

res/values/styles.xml - 这是我们设置主题以使用我们想要的标题背景颜色的地方

<?xml version="1.0" encoding="utf-8"?>
<resources> 
   <style name="WindowTitleBackground">     
        <item name="android:background">@color/titlebackgroundcolor</item>                   
    </style>
</resources>

res/values/colors.xml - 在这里设置你想要的颜色

<?xml version="1.0" encoding="utf-8"?>
<resources>   
    <color name="titlebackgroundcolor">#3232CD</color>
    <color name="titletextcolor">#FFFF00</color>
</resources>

AndroidMANIFEST.xml中,在应用程序(整个应用程序)或活动(仅此活动)标签中设置主题属性

<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...

从 Activity(称为 CustomTitleBar):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
        setContentView(R.layout.main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.mytitle);

}
于 2010-02-18T01:26:51.637 回答
18

感谢您提供清晰的解释,但是我想通过提出一个链接的问题来为您的答案添加更多信息(真的不想写新帖子,因为这是我的问题的基础)。

我在一个超类中声明我的标题栏,我所有的其他活动都是子类,我只需要更改一次栏的颜色。我还想添加一个图标并更改栏中的文本。我已经进行了一些测试,并设法更改了其中一个,但不能同时更改两者(使用 setFeatureDrawable 和 setTitle)。理想的解决方案当然是遵循链接中给出的线程中的解释,但是正如我在超类中声明的那样,由于 setContentView 和 R.id.myCustomBar 中的布局,我遇到了问题,因为如果我请记住,我只能调用一次 setContentView ...

编辑 找到我的答案:

对于像我一样喜欢使用超类的人来说,因为它非常适合在应用程序中随处可用的菜单,它在这里的工作原理是一样的。

只需将其添加到您的超类中:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
    setContentView(R.layout.customtitlebar);
    getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.customtitlebar);
    customTitleText = (TextView) findViewById(R.id.customtitlebar);

(您必须将 textview 声明为受保护的类变量)

然后它的强大之处在于,在你的应用程序的任何地方(例如,如果你所有的活动都是这个类的孩子),你只需要调用

customTitleText.setText("Whatever you want in title");

并且您的标题栏将被编辑。

在我的例子中关联的 XML 是 (R.layout.customtitlebar) :

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:background="@color/background">
<ImageView android:layout_width="25px" android:layout_height="25px"
    android:src="@drawable/icontitlebar"></ImageView>
<TextView android:id="@+id/customtitlebar"
    android:layout_width="wrap_content" android:layout_height="fill_parent"
    android:text="" android:textColor="@color/textcolor" android:textStyle="bold"
    android:background="@color/background" android:padding="3px" />
</LinearLayout>
于 2010-04-27T13:24:09.250 回答
11

还有另一种更改背景颜色的方法,但是如果 Window 的 View 层次结构及其标题发生更改,它可能会在未来的 Android 版本中失败。但是,在这种情况下,代码不会崩溃,只是错过了设置想要的颜色。

在您的 Activity 中,例如 onCreate,执行以下操作:

View titleView = getWindow().findViewById(android.R.id.title);
if (titleView != null) {
  ViewParent parent = titleView.getParent();
  if (parent != null && (parent instanceof View)) {
    View parentView = (View)parent;
    parentView.setBackgroundColor(Color.rgb(0x88, 0x33, 0x33));
  }
}
于 2010-12-02T19:26:41.473 回答
9

此代码有助于在 Android 中以编程方式更改标题栏的背景。将颜色更改为您想要的任何颜色。

public void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);
    getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));

}
于 2016-11-21T20:10:26.457 回答
6
protected void onCreate(Bundle savedInstanceState) {        
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

在上面的代码中,您可以尝试使用标题而不是标题栏, 这将影响您应用程序中的所有活动

于 2013-04-05T11:49:03.243 回答
2

我想没有。您可以创建无标题活动并在活动布局中创建自己的标题栏。

检查这个,第 63 行及以下:

getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)

设置自定义视图而不是默认标题视图。

于 2010-02-12T12:38:08.250 回答
2

看一眼platforms/android-2.1/data/res/layout/screen.xmlSDK。它似乎在那里定义了一个标题。您可以经常检查这样的布局并借用 style="?android:attr/windowTitleStyle" 您可以在自己的 TextViews 中使用和覆盖的样式。

您甚至可以通过执行以下操作选择直接调整的标题:

TextView title = (TextView)findViewById(android.R.id.title);
于 2010-02-17T23:05:27.523 回答
2

尝试使用以下代码

View titleView = getWindow().findViewById(android.R.id.title);
    if (titleView != null) {
      ViewParent parent = titleView.getParent();
      if (parent != null && (parent instanceof View)) {
        View parentView = (View)parent;
        parentView.setBackgroundColor(Color.RED);
      }
    }

也使用这个链接它非常有用: http: //nathanael.hevenet.com/android-dev-chang-the-title-bar-background/

于 2013-04-05T11:12:41.210 回答
2

通过使用 Google 提供的 v7 appcompat 支持库,可以更轻松地更改标题栏的颜色。

有关如何设置此支持库的信息,请参阅此链接:https ://developer.android.com/tools/support-library/setup.html

完成此操作后,将以下行添加到 res/values/styles.xml 文件中就足够了:

<style name="AppTheme" parent="AppBaseTheme">
    <item name="android:actionBarStyle">@style/ActionBar</item>
</style>

<!-- Actionbar Theme -->
<style name="ActionBar" parent="Widget.AppCompat.Light.ActionBar.Solid.Inverse">
    <item name="android:background">@color/titlebackgroundcolor</item>
</style>

(假设“titlebackgroundcolor”在您的 res/values/colors.xml 中定义,例如:

<color name="titlebackgroundcolor">#0000AA</color>

)

于 2014-10-14T16:36:36.137 回答
1

自 Android 5.0(API 级别 21)以来,事情似乎变得更好/更容易了。

我认为你正在寻找的是这样的:

<style name="AppTheme" parent="AppBaseTheme">
    <!-- Top-top notification/status bar color: -->
    <!--<item name="colorPrimaryDark">#000000</item>-->
    <!-- App bar color: -->
    <item name="colorPrimary">#0000FF</item>
</style>

请参阅此处以供参考:

https://developer.android.com/training/material/theme.html#ColorPalette

于 2017-12-07T05:31:13.287 回答
1

我通过更改“res”->“values”->“colors.xml”中的样式颜色值来做到这一点 在此处输入图像描述

这将改变整个项目的颜色,这对我来说很好。

在此处输入图像描述

于 2018-10-20T11:04:58.930 回答
1

将此代码粘贴到 setContentView 之后或 onCreate

如果您有颜色代码,请使用它;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));

如果您想要颜色库中的特定代码,请使用此代码;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
于 2020-06-05T23:39:02.417 回答
0

你可以使用它。

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));
于 2019-03-06T09:12:52.177 回答