2010-01-18 4 views
26

Je crée un titre personnalisé pour l'activité en désactivant standard et en gérant tout moi-même. Je me demande s'il est possible de remplacer le titre de standart par thème à mes besoins.Titre personnalisé avec l'image

Je peux personnaliser la taille, l'image d'arrière-plan et le texte via des thèmes en changeant les éléments windowXYZStyle.

La seule chose que je ne pouvais pas trouver - comment je peux ajouter une image au lieu de texte. J'ai essayé requestWindowFeature(Window.FEATURE_CUSTOM_TITLE) et d'affecter une mise en page personnalisée - mais cela ne semble pas fonctionner.

EDIT: Voici un rapport des suggestions de test, le code est ci-dessous - l'image de résultat n'apparaît pas.

Activité

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> 

Répondre

35

Il est possible de définir votre propre disposition de titre personnalisée, mais l'ordre d'exécution est important. Vous devez faire les choses dans cet ordre:

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

De plus, vous devrez peut-être augmenter la taille du titre; Si vous ne le faites pas, le bas de votre mise en page personnalisée peut simplement être masqué par votre activité. Vous pouvez changer la taille en ajoutant un thème qui spécifie la taille du titre. Cela irait dans une valeur fichier XML:

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

Ensuite, vous aurez besoin de définir le thème de votre activité (ou une application, si vous voulez que l'application entière d'avoir cette barre de titre personnalisé) dans AndroidManifest.xml:

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

Hey Daniel, merci pour la réponse, je l'ai fait avant de poser la question. Il était tard - donc je pourrais faire quelque chose. Avez-vous essayé cela? Essayez-le dans une activité qui étend PreferencesActivity et my_custom_title avec un arrière-plan et un logo personnalisés (comme vue d'image) - pour moi, il a assigné un titre personnalisé et les affichages de texte sont apparus - l'image n'a pas été affichée dans my_custom_title. Il en va de même pour l'arrière-plan, qui peut être résolu en ajoutant un élément supplémentaire à LargeTitleTheme. –

+0

J'ai fait exactement ce que j'ai décrit ci-dessus (j'ai pris l'exemple de code de ma source).Cependant, je ne l'ai jamais essayé sur un PreferencesActivity avant; peut-être y en a-t-il d'autres que vous devez faire pour remplacer cette barre de titre. Je ne suis pas sûr de comprendre votre problème maintenant; reformuler? –

+0

le problème est que l'affichage de l'image n'apparaît pas dans le titre personnalisé. Et j'ai besoin de claquer une image avec le logo au lieu de texte. –

6

Vous pouvez toujours utiliser:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

Et puis créez votre propre barre de titre dans l'avis de votre activité.

+0

Ouais exactement ce que je fais maintenant. Je pensais qu'il y a un moyen de standard de thème. Par exemple, barre de titre dans l'activité de préférence. Je ne veux vraiment pas jouer avec des mises en page personnalisées juste pour la barre de titre. –

+2

Je commence à penser que cela pourrait être la meilleure option. Pour commencer, cela éviterait le scintillement de la barre de titre lors de l'ouverture de l'application ainsi que la solution de contournement hackish que je devais utiliser pour supprimer les marges du calque conteneur, de sorte que je ne vois pas de bordure grise autour de la barre de titre. – Casebash

1

Etes-vous sûr que vous devez utiliser une image dans le titre plutôt que de simplement combiner dans le cadre de l'image d'arrière-plan et en laissant l'ébauche de titre? En utilisant une image NinePatch je m'attendrais à ce que vous seriez en mesure d'obtenir un résultat qui serait bien sur quel que soit le périphérique?

1

J'ai utilisé le code suivant pour adapter mon titre personnalisé à l'écran

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