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)
, há uma maneira de alterar a cor de fundo da barra?
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)
, há uma maneira de alterar a cor de fundo da barra?
Respostas:
Este tópico irá ajudá-lo a começar a construir sua própria barra de título em um arquivo xml e usá-la em suas atividades
Editar
Aqui está um breve resumo do conteúdo do link acima - Isso é apenas para definir a cor do texto e o fundo da barra de título - sem redimensionamento, sem botões, apenas a amostra mais simples
res / layout / mytitle.xml - Esta é a visualizaçã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 / values / themes.xml - Queremos manter o tema android padrão e só precisamos mudar a cor de fundo do fundo do título. Portanto, criamos um tema que herda o tema padrão e definimos o estilo de fundo para 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 / values / styles.xml - Aqui é onde 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 / values / colors.xml - Defina aqui a cor desejada
<?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 theme no aplicativo (para todo o aplicativo) ou nas tags de atividade (apenas esta atividade)
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
Na 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);
}
Obrigado por esta explicação clara, no entanto, gostaria de acrescentar um pouco mais à sua resposta, fazendo uma pergunta vinculada (não quero fazer um novo post, pois este é o fundamento da minha pergunta).
Estou declarando minha barra de título em uma Superclasse da qual todas as minhas outras atividades são filhas, para ter que mudar a cor da barra apenas uma vez. Também gostaria de adicionar um ícone e alterar o texto na barra. Fiz alguns testes e consegui mudar um ou outro, mas não os dois ao mesmo tempo (usando setFeatureDrawable e setTitle). A solução ideal seria, claro, seguir a explicação no tópico fornecido no link, mas como estou declarando em uma superclasse, tenho um problema devido ao layout em setContentView e a R.id.myCustomBar, porque se eu lembre-se de que posso chamar setContentView apenas uma vez ...
EDITAR Encontrei minha resposta:
Para quem, como eu, gosta de trabalhar com superclasses porque é ótimo ter 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ê tem que declarar o textview como variável de classe protegida)
E o poder disso é que, em qualquer lugar em seu aplicativo (se, por exemplo, todas as suas atividades forem filhas desta classe), você só precisa chamar
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>
Existe outra maneira de alterar a cor de fundo, no entanto, é um hack e pode falhar em versões futuras do Android se a hierarquia de visualização da janela e seu título forem alterados. Porém, o código não travará, apenas deixará de definir a cor desejada, nesse caso.
Em sua atividade, como 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));
}
}
Este código ajuda a alterar o plano de fundo da barra de título de forma programática no Android. Mude a cor para qualquer cor desejada.
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#1c2833")));
}
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, você pode tentar, você pode usar o título em vez da barra de título isso afetará todas as atividades em seu aplicativo
Suponho que não. Você pode criar atividades sem título e criar sua própria barra de título no layout de atividades.
Verifique isto , Linha 63 e abaixo:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
define a visualização personalizada em vez da visualização do título padrão.
Dê uma olhada no platforms/android-2.1/data/res/layout/screen.xml
SDK. Parece definir um título ali. Você pode frequentemente examinar layouts como este e emprestar os
style="?android:attr/windowTitleStyle"
estilos que você pode usar e substituir em seus próprios TextViews.
Você pode até mesmo 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);
}
}
também use este link, é muito útil: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
Existe uma alternativa mais fácil para alterar a cor da barra de título, usando a biblioteca de suporte appcompat v7 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 / 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>
(assumindo que "titlebackgroundcolor" está definido em res / values / colors.xml, por exemplo:
<color name="titlebackgroundcolor">#0000AA</color>
)
As coisas parecem ter ficado melhores / mais fáceis desde o Android 5.0 (API de nível 21).
Acho 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
Cole este código após setContentView ou em onCreate
se você tiver um código de cores, use-o;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
se você quiser um código específico da biblioteca de cores, use-o;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));