Nella mia applicazione Android voglio che la barra del titolo standard / di base cambi colore.
Per cambiare il colore del testo che hai setTitleColor(int color)
, c'è un modo per cambiare il colore di sfondo della barra?
Nella mia applicazione Android voglio che la barra del titolo standard / di base cambi colore.
Per cambiare il colore del testo che hai setTitleColor(int color)
, c'è un modo per cambiare il colore di sfondo della barra?
Risposte:
Questo thread ti consentirà di iniziare a creare la tua barra del titolo in un file xml e utilizzarla nelle tue attività
modificare
Ecco un breve riepilogo del contenuto del collegamento sopra - Serve solo per impostare il colore del testo e lo sfondo della barra del titolo - nessun ridimensionamento, nessun pulsante, solo il campione più semplice
res / layout / mytitle.xml - Questa è la vista che rappresenterà la barra del titolo
<?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 - Vogliamo mantenere il tema Android predefinito e dobbiamo solo cambiare il colore di sfondo dello sfondo del titolo. Quindi creiamo un tema che eredita il tema predefinito e impostiamo lo stile di sfondo sul nostro stile.
<?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 - Qui è dove impostiamo il tema per utilizzare il colore che vogliamo per lo sfondo del titolo
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="WindowTitleBackground">
<item name="android:background">@color/titlebackgroundcolor</item>
</style>
</resources>
res / values / colors.xml - Imposta qui il colore che desideri
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="titlebackgroundcolor">#3232CD</color>
<color name="titletextcolor">#FFFF00</color>
</resources>
In AndroidMANIFEST.xml , imposta l'attributo del tema nell'applicazione (per l'intera applicazione) o nei tag dell'attività (solo questa attività)
<activity android:name=".CustomTitleBar" android:theme="@style/customTheme" ...
Dall'attività (chiamata 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);
}
Grazie per questa chiara spiegazione, tuttavia vorrei aggiungere un po 'di più alla tua risposta ponendo una domanda collegata (non voglio davvero fare un nuovo post poiché questo è il fondamento della mia domanda).
Dichiaro la mia barra del titolo in una Superclass dalla quale, tutte le mie altre attività sono bambini, di dover cambiare il colore della barra solo una volta. Vorrei anche aggiungere un'icona e modificare il testo nella barra. Ho eseguito alcuni test e sono riuscito a cambiare l'uno o l'altro ma non entrambi contemporaneamente (usando setFeatureDrawable e setTitle). La soluzione ideale sarebbe ovviamente seguire la spiegazione nel thread fornita nel collegamento, ma poiché sto dichiarando in una superclasse, ho un problema a causa del layout in setContentView e R.id.myCustomBar, perché se io ricorda bene che posso chiamare setContentView solo una volta ...
EDIT Ho trovato la mia risposta:
Per coloro a cui, come me, piace lavorare con le superclassi perché è ottimo per avere un menu disponibile ovunque in un'app, qui funziona allo stesso modo.
Aggiungilo alla tua 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);
(devi dichiarare la textview come variabile di classe protetta)
E poi il potere di questo è che, ovunque nella tua app (se ad esempio tutte le tue attività sono figli di questa classe), devi solo chiamare
customTitleText.setText("Whatever you want in title");
e la barra del titolo verrà modificata.
L'XML associato nel mio 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>
C'è un altro modo per cambiare il colore di sfondo, tuttavia è un trucco e potrebbe non riuscire nelle versioni future di Android se la gerarchia di visualizzazione della finestra e il suo titolo vengono modificati. Tuttavia, il codice non si bloccherà, in tal caso mancherà di impostare il colore desiderato.
Nella tua attività, come onCreate, fai:
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));
}
}
Questo codice aiuta a cambiare lo sfondo della barra del titolo a livello di codice in Android. Cambia il colore in qualsiasi colore tu voglia.
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);
}
}
sul codice sopra puoi provare puoi usare il titolo invece della barra del titolo questo influenzerà tutte le attività nella tua applicazione
Suppongo di no. È possibile creare attività senza titolo e creare la propria barra del titolo nel layout dell'attività.
Controlla questo , riga 63 e sotto:
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title_1)
imposta la vista personalizzata invece della vista titolo predefinita.
Dai un'occhiata platforms/android-2.1/data/res/layout/screen.xml
all'SDK. Sembra definire un titolo lì. Puoi spesso esaminare layout come questo e prendere in prestito il file
style="?android:attr/windowTitleStyle"
stili che puoi utilizzare e sovrascrivere nelle tue TextView.
Potresti anche essere in grado di selezionare il titolo per il tweaking diretto facendo:
TextView title = (TextView)findViewById(android.R.id.title);
Prova con il codice seguente
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);
}
}
utilizzare anche questo link è molto utile: http://nathanael.hevenet.com/android-dev-changing-the-title-bar-background/
Esiste un'alternativa più semplice per modificare il colore della barra del titolo, utilizzando la libreria di supporto appcompat v7 fornita da Google.
Vedi questo collegamento su come configurare questa libreria di supporto: https://developer.android.com/tools/support-library/setup.html
Dopo averlo fatto, è sufficiente aggiungere le seguenti righe al file 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>
(supponendo che "titlebackgroundcolor" sia definito nel tuo res / values / colors.xml, ad esempio:
<color name="titlebackgroundcolor">#0000AA</color>
)
Le cose sembrano essere migliorate / più facili da Android 5.0 (livello API 21).
Penso che quello che stai cercando sia qualcosa del genere:
<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>
Vedi qui per riferimento:
https://developer.android.com/training/material/theme.html#ColorPalette
Incolla questo codice dopo setContentView o in onCreate
se hai un codice colore usalo;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.parseColor("#408ed4")));
se vuoi un codice specifico dalla libreria dei colori usa questo;
getSupportActionBar().setBackgroundDrawable(new ColorDrawable(Color.WHITE));