设置标题背景色


106

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

要更改您拥有的文本颜色setTitleColor(int color),是否可以更改条形的背景颜色?


我认为无需使用自定义标题即可将背景颜色更改为标题栏。检查此帖子
Deepthi Jabili 2012年

我会看Edwinfad的答案,而不是过时的答案。
zgc7009 '16

Answers:


186

线程将使您开始在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" ...

从活动(称为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);

}

9
在大多数情况下,仅提供链接是非常便宜的,并且在stackoverflow上并不是非常喜欢的答案。尝试从此页面上的链接中获得一些知识。您将在社区中获得越来越多的知识,即使链接断开,您的答案仍然会提供一些搜索词,这些词可以指导其他人。
Janusz 2010年

7
@Janusz:完全正确-所以我以最简单的示例更新了帖子,以便人们可以开始使用,而不必阅读上面链接中的线索
ccheneson 2010年

3
覆盖android样式后,如果您只想更改背景颜色,则无需从代码中添加自定义标题
Janusz,2010年

1
正如Janusz所说,如果您只想覆盖使用的样式(而不添加新的View),则不需要自定义View。在这种情况下,您也不需要请求FEATURE_CUSTOM_STYLE。最后,您可以在应用程序级别定义样式,以将其立即应用于所有活动。顺便说一下,感谢您的代码。
埃里克·科克

2
这不会更改标题的背景颜色,仅会更改文本颜色。即使我更改标题栏<color name =“ titlebackgroundcolor”>#3232CD </ color>的颜色。难道我做错了什么?
Shaista Naaz

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>

为什么我被否决?我的代码有什么问题?它非常适合我...
Sephy

1
作为一个初学者,我觉得以上是一段不错的代码,带有很好的解释。为您+1 !!!
RK

@Sephy我必须为标题栏设置不同的类,然后只有我可以使用它吗?
维卡斯·古普塔


11

还有另一种更改背景颜色的方法,但是这是一种技巧,如果更改Window的View层次结构及其标题,则在将来的Android版本上可能会失败。但是,在这种情况下,代码不会崩溃,只需要设置所需的颜色即可。

在您的活动中,像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));
  }
}

很好,也很简单。但是我想问你一件事,这是通过代码完成的,因此几乎没有延迟。为了避免这种情况,我将不得不在xml中编写所有内容,而在代码中则不编写任何内容。所以你能指导我吗?
Shaista Naaz

我认为您在上面选择的答案中有解决方案。您需要为活动定义一个自定义主题,并将其android:windowTitleBackgroundStyle设置为所需的颜色。
mikeplate 2011年

7

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

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

}

这是在API 11(3.0 Honeycomb)中引入的,在这一点上肯定已经过时了以至于不能认为这是一个有效的选项。
zgc7009 '16

但是我在我最近的所有带有targetSdkVersion =“ 23”的应用程序中仍在使用它,而未获得任何不赞成使用的信息。
Edwinfad

绝对是100%罚款。它并没有被任何东西所替代,但是至少在没有兼容性库的情况下,应该避免在API 11(很少有人会做)之前使用它。
zgc7009 '16

注意。@ zgc7009
Edwinfad

1
如果您使用的是AppCompatActivity,请改用getSupportActionBar()
mondlos

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

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


2

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

检查,第63行及以下:

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

设置customview而不是默认标题视图。


如何/在何处创建自定义/自己的标题栏?
Thizzer

2

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

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

TextView title = (TextView)findViewById(android.R.id.title);

1
上面的答案很好,但是是否可以只为标题栏着色而不用为其创建自定义布局?
埃诺(Eno)2010年

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-changing-the-title-bar-background/


这对Lollipop仍然有效吗?titleView似乎为我返回null。
WORMSS 2015年

1

通过使用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>

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

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


如果您仅以 Android 5为目标,那么还有一个更简单的选择,请参阅[ developer.android.com/training/material/…
stefan.m 2014年


1

我通过在“ res”->“ values”->“ colors.xml”中更改样式颜色值来完成此操作 在此处输入图片说明

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

在此处输入图片说明


0

您可以使用它。

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));

0

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

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

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

如果您要从颜色库中获取特定代码,请使用此代码;

getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.