Pergunta

No meu aplicativo Android, quero que a barra de título padrão/básica mude de cor.

Para alterar a cor do texto que você tem setTitleColor(int color), existe uma maneira de mudar a cor de fundo da barra?

Foi útil?

Solução

este fio Vai começar a criar sua própria barra de título em um arquivo XML e usá -lo em suas atividades

Editar

Aqui está um breve resumo do conteúdo do link acima - este é apenas Para definir a cor do texto e o plano de fundo da barra de título - sem redimensionamento, sem botões, apenas a amostra mais simples

res/layout/mytitle.xml - Esta é a visão que representará a barra de título

<?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/valores/temes.xml - Queremos manter o tema padrão do Android e só precisamos alterar a cor de fundo do fundo do título. Por isso, criamos um tema que herda o tema padrão e definimos o estilo de fundo para o nosso próprio estilo.

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

res/valores/styles.xml - É aqui que definimos o tema para usar a cor que queremos para o fundo do título

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

res/valores/colors.xml - Defina aqui a cor que você deseja

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

No Androidmanifest.xml, defina o atributo do tema no aplicativo (para todo o aplicativo) ou na atividade (apenas esta atividade) tags

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

Da atividade (chamada 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);

}

Outras dicas

Obrigado por esta explicação clara, no entanto, gostaria de adicionar um pouco mais à sua resposta fazendo uma pergunta vinculada (não quero fazer uma nova postagem, pois esta é o porão da minha pergunta).

Estou declarando minha barra de título em uma superclasse da qual, todas as minhas outras atividades são crianças, para ter que mudar a cor do bar apenas uma vez. Eu gostaria de adicionar também um ícone e alterar o texto na barra. Fiz alguns testes e consegui alterar um ou outro, mas não ambos ao mesmo tempo (usando o SetFeatureDrawable e o Settitle). A solução ideal seria, obviamente, seguir a explicação no segmento fornecido no link, mas como estou declarando em uma superclasse, tenho um problema devido ao layout no setContentview e no R.id.mycustombar, porque se eu Lembre -se bem, posso chamar o setContentView apenas uma vez ...

EDITAREncontrei minha resposta:

Para aqueles que, como eu, gostam de trabalhar com superclasses, porque é ótimo para obter um menu disponível em qualquer lugar de um aplicativo, funciona da mesma forma aqui.

Basta adicionar isso à sua superclasse:

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

(Você precisa declarar o TextView como variável de classe protegida)

E então o poder disso é que, em todos os lugares do seu aplicativo (se, por exemplo, todas as suas atividades são filhos desta classe), você só precisa ligar

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

e sua barra de título será editada.

O XML associado no meu caso é (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>

Há outra maneira de alterar a cor do plano de fundo, no entanto, é um hack e pode falhar nas versões futuras do Android se a hierarquia de visualização da janela e seu título for alterado. No entanto, o código não trava, apenas perdi a definição da cor desejada, nesse caso.

Em sua atividade, como o OnCreate, faça:

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

No código acima que você pode tentar, você pode usar título ao invés de Barra de tituloIsso afetará todas as atividades em seu aplicativo

Esse código ajuda a alterar o plano de fundo da barra de título programaticamente no Android. Altere a cor para qualquer cor que você quiser.

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

}

Suponho que não. Você pode criar atividades sem título e criar sua própria barra de título no layout de atividades.

Verificar isto, Linha 63 e abaixo:

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

Define o CustomView em vez da visualização padrão do título.

Dar uma olhada platforms/android-2.1/data/res/layout/screen.xml do SDK. Parece definir um título lá. Você pode examinar frequentemente layouts como este e emprestar o style="?android:attr/windowTitleStyle"Estilos que você pode usar e substituir em suas próprias visualizações de texto.

Você pode até selecionar o título para ajustes diretos fazendo:

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

Tente com o seguinte código

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

Use este link também é muito útil: http://nathanael.hevenet.com/android-dev-changing-the-title-background/

Há uma alternativa mais fácil para alterar a cor da barra de título, usando a biblioteca de suporte do V7 AppCompat fornecida pelo Google.

Veja este link sobre como configurar esta biblioteca de suporte: https://developer.android.com/tools/support-library/setup.html

Depois de fazer isso, é suficiente adicionar as seguintes linhas ao seu arquivo res/valores/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>

(Supondo que "TitleBackgroundColor" seja definido em seu res/valores/colors.xml, por exemplo:

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

)

As coisas parecem ter melhorado/mais fácil desde o Android 5.0 (nível 21 da API).

Eu acho que o que você está procurando é algo assim:

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

Veja aqui para referência:

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

Eu fiz isso alterando os valores de cores de estilo em "res" -> "valores" -> "colors.xml"enter image description here

Isso mudará cores para todo o projeto, o que é bom para mim.

enter image description here

você pode usar isso.

  toolbar.setTitleTextColor(getResources().getColor(R.color.white));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top