2010-04-19 24 views
15

Así que estoy usando las técnicas en this thread para utilizar un fondo personalizado para mi barra de título. Lamentablemente, el marco coloca mi diseño dentro de un FrameLayout (title_container) que tiene relleno como se ve a continuación.Barra de título personalizada sin relleno (Android)

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

¿Hay alguna forma de quitar los bordes grises? El diseño del marco se define en com.android.internal.R.id.title_container, por lo que acceder al marco por ID sería frágil.

Respuesta

16

¡Estaba luchando con este mismo problema y ahora tengo la respuesta!

Como se habrá visto varios lugares, es necesario crear un recurso 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> 

Nota no se menciona a menudo en los sitios hablando de las barras de títulos personalizados es necesario seleccionar este tema en la vista, la actividad o el nivel de aplicación. Lo hago a nivel de aplicación mediante la adición de android: propiedad de tema a la aplicación:

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

también necesita un styles.xml para definir que WindowTitleBackgroundStyle. A diferencia de las diversas versiones de este archivo que he visto flotando aroung la web, he añadido una línea adicional para el archivo que establece el relleno a 0, lo que elimina el relleno que se está quejando:

<?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

gracias, esto ayudó mucho. –

+0

setPadding en ViewGroup no lo hizo por mí. Su sugerencia de establecer un fondo con 0 relleno lo hizo. – AlanKley

+0

Muchas gracias, funcionó a la perfección. –

1

hay un hilo devuelvan todo lo largo de anddev.org que puede ser capaz de ayudarle a cabo

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

he seguido y con éxito creado mi propia barra de título, que me permite establecer el relleno.

XML para mi barra de título:


<?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> 

Lo anterior crea una pequeña barra gris con el texto alineado a la derecha e izquierda

+0

Eso en realidad no me funciona. Estoy tratando de eliminar el relleno, no agregue relleno adicional – Casebash

7

En realidad no hay necesidad de utilizar un diseño personalizado para personalizar la imagen de fondo. El siguiente código en theme.xml funcionará:

<?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> 

Sin embargo, si usted realmente desea utilizar una barra de título personalizado, a continuación, el siguiente código eliminará el margen:

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

title_bar_background se estableció como el ID de la imagen de fondo en el XML. Configuré android:scaleType="fitXY".

+0

que no parece funcionar en Android 4. ¿Tiene alguna idea de por qué sería esto? Estoy usando Android: Theme.Holo.Light como padre – nLL

1

llegué deshacerse del relleno obteniendo el contenedor del título y configurando el relleno en 0. Funciona en 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

Como se ha mencionado por dalewking, se puede cambiar el manifiesto de la siguiente manera:

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

Pero no funcionó para mí hasta que añadí

android:theme="@style/MyTheme" 

a la actividad en sí como :

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

A partir de 4.2 y ADT 21 al crear un diseño predeterminado se añaden dimensiones estándar al contenedor principal:

<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> 

Los valores se encuentran en 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> 

Cualquiera de eliminarlos del padre o cambie los valores de dimens.xml a sus valores deseados.

0

que añaden el número siguiente de relleno del AppTheme en styles.xml

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

El manifiesto de aplicación utiliza ese tema:

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

resolver esto por mí.

Cuestiones relacionadas