2010-04-19 3 views
15

Поэтому я использую методы в this thread, чтобы использовать пользовательский фон для моего заголовка. К сожалению, каркас размещает мой макет внутри FrameLayout (title_container), который имеет отступы, как показано ниже.Пользовательская строка заголовка без заполнения (Android)

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

Есть в любом случае, чтобы удалить серые границы? Макет кадра определяется в com.android.internal.R.id.title_container, поэтому доступ к кадру по идентификатору будет хрупким.

ответ

16

Я боролся с этой же проблемой, и теперь у меня есть ответ!

Как вы, наверное, видели несколько мест, вам нужно создать 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> 

Примечание это не часто упоминается в сайтах говорить о пользовательских заголовков вам необходимо выбрать эту тему в вид, активность или уровень приложения. Я делаю это на уровне приложений путем добавления андроида: тема собственности к применению:

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

Кроме того, необходимо styles.xml определить, что WindowTitleBackgroundStyle. В отличие от различных версий этого файла я видел плавающие aroung в Интернете, я добавил еще одну строку в файл, который устанавливает отступ в 0, который избавляется от заполнения Вы жалуетесь:

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

спасибо, это очень помогло. –

+0

setPadding на ViewGroup не сделал этого для меня. Ваше предложение установить фон с добавлением 0 сделало это. – AlanKley

+0

Большое спасибо, это сработало отлично. –

1

Существует lenghty нити над на anddev.org, которые могут быть в состоянии помочь вам

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

Я последовал за ним и успешно создал свою собственную строку заголовка, которая позволяет мне установить отступы.

Xml для моего заголовка:


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

выше создает небольшую серую панель с текстом выровненный с правой и левой сторон

+0

Это не работает для меня. Я пытаюсь удалить прокладку, а не добавлять дополнительные прокладки – Casebash

7

Там фактически нет необходимости использовать настраиваемый макет для настройки фонового изображения. Следующий код в theme.xml будет работать:

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

Однако, если вы на самом деле хотите использовать пользовательский заголовок окна, то следующий код удалит маржу:

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

title_bar_background был установлен как ID фонового изображения в XML. Я установил android:scaleType="fitXY".

+0

, похоже, она не работает на Android 4. У вас есть идея, почему это было бы? Я использую android: Theme.Holo.Light as parent – nLL

1

Я получил избавиться от заполнения, получив контейнер заголовка и установив дополнение на 0. Он работает на 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

Как упомянуто dalewking, вы можете изменить манифеста, как это:

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

Но это не работает для меня, пока я не добавил

android:theme="@style/MyTheme" 

к деятельности это сам как :

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

начиная с: 4.2 и ADT 21 при создании макета по умолчанию стандартных размеров добавляются в родительском контейнер:

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

Значение расположены в 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> 

Либо удалить их от родителя или измените значения dimens.xml на нужные вам значения.

0

Я добавил следующий пункт заполнитель AppTheme в styles.xml

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

манифеста Приложение использует эту тему:

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

Это разрешенное для меня.

Смежные вопросы