2010-04-19 12 views
15

Donc j'utilise les techniques dans this thread pour utiliser un arrière-plan personnalisé pour ma barre de titre. Malheureusement, le cadre place ma disposition à l'intérieur d'un FrameLayout (title_container) qui a un remplissage comme on le voit ci-dessous.Barre de titre personnalisée sans rembourrage (Android)

alt text http://lh3.ggpht.com/_KP55v0Zt2pk/S80CUbrYkCI/AAAAAAAAARY/FJ_WPt8ah2s/s800/title_bar.png

est-il de toute façon à supprimer les bordures grises? La disposition des cadres est définie en com.android.internal.R.id.title_container, l'accès au cadre par ID serait donc fragile.

Répondre

16

Je luttais avec ce même problème et maintenant j'ai la réponse!

Comme vous l'avez probablement vu plusieurs endroits, vous devez créer une ressource themes.xml:

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

Remarque Il est souvent mentionné dans les sites parlant de barres de titre personnalisées, vous devez sélectionner ce thème à la vue, l'activité ou le niveau d'application. Je le fais au niveau de l'application en ajoutant Android: propriété thème à l'application:

<application android:icon="@drawable/icon" 
       android:label="@string/app_name" 
       android:theme="@style/MyTheme"> 

Vous devez également styles.xml pour définir cette WindowTitleBackgroundStyle. Contrairement aux différentes versions de ce fichier que je l'ai vu flotter aroung le web, j'ai ajouté une ligne supplémentaire au fichier qui définit le rembourrage à 0 qui se débarrasse du rembourrage vous plaignez:

<?xml version="1.0" encoding="UTF-8"?> 
<resources> 
    <style name="WindowTitleBackground"> 
     <item name="android:background">@android:color/transparent</item> 
     <item name="android:padding">0px</item> 
    </style> 
</resources> 
+0

merci, cela a beaucoup aidé. –

+0

setPadding sur ViewGroup ne l'a pas fait pour moi. Votre suggestion de définir un arrière-plan avec 0 padding l'a fait. – AlanKley

+0

Merci beaucoup, cela a fonctionné parfaitement. –

1

Il y a un fil lenghty sur le anddev.org qui peut être en mesure de vous aider

http://www.anddev.org/my_own_titlebar_backbutton_like_on_the_iphone-t4591.html

Je l'ai suivi et réussi à créer ma propre barre de titre qui me permet de définir le rembourrage.

Xml pour ma barre de titre:


<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout android:id="@+id/header" 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="38px" android:layout_width="fill_parent" 
android:background="@drawable/gradient"> 

<TextView android:id="@+id/title" android:layout_width="wrap_content" 
android:gravity="center_vertical" style="@style/PhoneText" 
android:layout_alignParentLeft="true" 
android:text="New Title" android:background="@android:color/transparent" 
android:layout_height="wrap_content" android:layout_alignParentTop="true" 
android:padding="5dip" android:layout_marginBottom="7px"/> 

<TextView android:id="@+id/time" android:layout_width="wrap_content" 
android:gravity="center_vertical" style="@style/PhoneText2" 
android:layout_alignParentRight="true" 
android:text="Test Text" android:background="@android:color/transparent" 
android:layout_height="wrap_content" android:layout_alignParentTop="true" 
android:padding="4dip" android:layout_marginBottom="7px"/> 
</RelativeLayout> 

Le ci-dessus crée une petite barre grise avec du texte aligné sur les côtés droit et gauche

+0

Cela ne fonctionne pas vraiment pour moi. J'essaie d'enlever le rembourrage, ne pas ajouter de rembourrage supplémentaire – Casebash

7

Il est en fait pas nécessaire d'utiliser une mise en page personnalisée pour personnaliser l'image d'arrière-plan. Le code suivant dans theme.xml fonctionnera:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="TitlebarBackgroundStyle"> 
     <item name="android:background">@drawable/header_bg</item> 
    </style> 
    <style name="Theme.OTPMain" parent="android:Theme"> 
     <item name="android:windowTitleBackgroundStyle">@style/TitlebarBackgroundStyle</item> 
    </style> 
</resources> 

Cependant, si vous ne voulez utiliser une barre de titre personnalisé, le code suivant supprime la marge:

ViewGroup v = (ViewGroup) findViewById(android.R.id.title); 
v.setPadding(0, 0, 0, 0) 

title_bar_background a été défini comme la ID de l'image d'arrière-plan dans le fichier XML. J'ai mis android:scaleType="fitXY".

+0

il ne semble pas fonctionner sur Android 4. avez-vous une idée pourquoi ce serait? J'utilise Android: Theme.Holo.Light comme parent – nLL

1

Je suis débarrasser du remplissage en obtenant le conteneur de titre et en réglant le remplissage à 0. Il fonctionne sur Android 4.

titleContainerId = (Integer)Class.forName("com.android.internal.R$id").getField("title_container").get(null); 

ViewGroup vg = ((ViewGroup) getWindow().findViewById(titleContainerId)); 
vg.setPadding(0, 0, 0, 0); 
1

Comme mentionné par dalewking, vous pouvez modifier le Manifest comme ceci:

<application android:icon="@drawable/icon" 
      android:label="@string/app_name" 
      android:theme="@style/MyTheme"> 

Mais cela n'a pas fonctionné pour moi jusqu'à ce que j'ajouté

android:theme="@style/MyTheme" 

à l'activité elle-même comme :

<activity 
     android:name=".MainActivity" 
     android:screenOrientation="portrait" 
     android:theme="@style/CustomTheme" >    
    </activity> 
0

À partir du 4.2 et ADT 21 lors de la création d'une disposition par défaut des dimensions standard sont ajoutées au conteneur parent:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

</RelativeLayout> 

valeurs sont situées dans res/dimens.xml:

<!-- Default screen margins, per the Android Design guidelines. --> 
<dimen name="activity_horizontal_margin">16dp</dimen> 
<dimen name="activity_vertical_margin">16dp</dimen> 

</resources> 

Soit les retirer du parent ou changez les valeurs de dimens.xml à vos valeurs désirées.

0

I a ajouté l'élément de rembourrage suivant la AppTheme dans styles.xml

<style name="AppTheme" parent="AppBaseTheme"> 
... 
<item name="android:padding">0dp</item> 
... 
</style> 

Le manifeste d'application utilise ce thème:

<application 
... 
android:theme="@style/AppTheme" > 
... 

Cette résolu pour moi.

Questions connexes