Пользовательская строка заголовка без отступов (Android) - PullRequest
15 голосов
/ 19 апреля 2010

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

альтернативный текст http://lh3.ggpht.com/_KP55v0Zt2pk/S80CUbrYkCI/AAAAAAAAARY/FJ_WPt8ah2s/s800/title_bar.png

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

Ответы [ 7 ]

16 голосов
/ 20 октября 2011

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

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

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

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

Вам также нужен файл styles.xml для определения этого WindowTitleBackgroundStyle. В отличие от различных версий этого файла, которые я видел в Интернете, я добавил еще одну строку в файл, который устанавливает отступ в 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>
7 голосов
/ 20 апреля 2010

На самом деле нет необходимости использовать пользовательский макет для настройки фонового изображения. Будет работать следующий код в 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 был установлен в качестве идентификатора фонового изображения в XML. Я установил android:scaleType="fitXY".

1 голос
/ 28 ноября 2012

Как уже упоминалось в 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>
1 голос
/ 06 октября 2012

Я избавился от отступов, получив контейнер заголовка и установив отступ на 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 голос
/ 19 апреля 2010

На 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 голосов
/ 05 января 2015

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

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

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

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

Это решило это для меня.

0 голосов
/ 19 марта 2013

Начиная с 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 / измеренияs.xml:

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

</resources>

Либо удалите их из родительского элемента, либо измените значения измеренияs.xml на нужные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...