2010-01-18 23 views
26

Sto creando un titolo personalizzato per attività disabilitando quello standard e gestendo tutto da solo. Mi chiedo se è possibile sostituire/titolo standard standart alle mie esigenze.Titolo personalizzato con immagine

È possibile personalizzare le dimensioni, l'immagine di sfondo e il testo tramite temi modificando gli elementi della finestra XYZStyle.

L'unica cosa che non riuscivo a trovare - come posso aggiungere un'immagine al posto del testo. Ho provato requestWindowFeature(Window.FEATURE_CUSTOM_TITLE) e assegnare un layout personalizzato - ma non sembra funzionare.

MODIFICA: ecco un rapporto sui suggerimenti di test, il codice è sotto - risultato - la visualizzazione dell'immagine non viene visualizzata.

Attività

public class SettingsActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 

    } 
} 

XML : 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="26dip" 
    android:paddingLeft="5dip" 
    android:background="@drawable/titlebar_bg" 
    android:layout_gravity="left|center" 
> 
    <ImageView 
     android:id="@+id/logo" 
     android:src="@drawable/title_logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

risposta

35

È possibile impostare il proprio layout del titolo personalizzato, tuttavia l'ordine di esecuzione è importante. Devi fare le cose nell'ordine:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.my_layout); 
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_custom_title); 

Inoltre, potrebbe essere necessario aumentare le dimensioni del titolo; se non lo fai, la parte inferiore del tuo layout personalizzato potrebbe essere nascosta dalla tua attività. È possibile modificare le dimensioni aggiungendo un tema che specifica la dimensione del titolo. Questo sarebbe andato in un file XML valori:

<resources> 
    <style name="LargeTitleTheme"> 
     <item name="android:windowTitleSize">40dip</item> 
    </style> 
</resources> 

Allora avresti bisogno di impostare il tema per la vostra attività (o applicazione, se si desidera che l'intera applicazione di avere questa barra del titolo personalizzato) in AndroidManifest.xml:

<activity android:name=".MyCustomTitleActivity" android:theme="@style/LargeTitleTheme" /> 
+0

Hey Daniel, grazie per la risposta, l'ho fatto prima di fare la domanda. Era tardi, quindi potevo incasinare qualcosa. Hai provato questo? Provalo in attività che estende PreferencesActivity e my_custom_title hanno uno sfondo e un logo personalizzati (come la visualizzazione dell'immagine) su di esso - per me è stato assegnato il titolo personalizzato e le visualizzazioni di testo mostrate - vista immagine in my_custom_title - no. Lo stesso vale per lo sfondo, che può essere risolto aggiungendo un altro oggetto a LargeTitleTheme. –

+0

Ho fatto esattamente quello che ho descritto sopra (ho preso il codice di esempio dalla mia fonte).Tuttavia, non l'ho mai provato su PreferencesActivity prima; forse c'è ancora dell'altro che devi fare per scavalcare quella barra del titolo. Non sono sicuro di aver capito quale sia il tuo problema adesso; ribadire? –

+0

il problema è che la vista dell'immagine non viene visualizzata nel titolo personalizzato. E ho bisogno di schiaffi un'immagine con il logo al posto del testo. –

6

Si può sempre utilizzare:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

e quindi creare la propria barra del titolo all'interno di vista del vostro attività.

+0

Sì esattamente quello che sto facendo ora. Stavo pensando che c'è un modo per standard di tema. Ad esempio, la barra del titolo nelle attività di preferenza. Non voglio davvero scherzare con i layout personalizzati solo per il gusto della barra del titolo. –

+2

Sto iniziando a pensare che questa potrebbe essere l'opzione migliore. Per cominciare, eviterebbe lo sfarfallio della barra del titolo quando l'applicazione si aprirà così come il trucco hackish che dovevo usare per rimuovere i margini dal layer di contenimento, in modo che non vedessi un bordo grigio attorno alla barra del titolo. – Casebash

1

Sei sicuro che è necessario utilizzare un'immagine nel titolo, piuttosto che solo la combinazione come parte della vostra immagine di sfondo e lasciare il titolo vuoto? Usando l'immagine NinePatch Mi aspetto che tu possa ottenere un risultato che sembrerebbe buono indipendentemente dal dispositivo?

1

Ho usato il seguente codice per adattare il mio titolo personalizzato alla schermata

<ImageView 
    android:id="@+id/header_img" 
    android:src="@drawable/header_img" 
    android:layout_width="700dip" 
    android:layout_height="70dip" /> 
Problemi correlati