自定义标题栏没有填充(Android)

时间:2010-04-19 06:23:59

标签: android user-interface

所以我使用this thread中的技术为我的标题栏使用自定义背景。不幸的是,框架将我的布局放在FrameLayouttitle_container)内,其填充如下所示。

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

无论如何都要删除灰色边框?框架布局在com.android.internal.R.id.title_container中定义,因此通过ID访问框架将是脆弱的。

7 个答案:

答案 0 :(得分: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>

请注意,在视图,活动或应用程序级别中,您需要在自定义标题栏中选择此主题时,不会经常提及它。我是在应用程序级别通过向应用程序添加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>

答案 1 :(得分: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被设置为XML中背景图像的ID。我设置android:scaleType="fitXY"

答案 2 :(得分:1)

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>

上面创建了一个小灰色条,文本与右侧和左侧对齐

答案 3 :(得分: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);

答案 4 :(得分:1)

如dalewking所述,您可以像这样更改Manifest:

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

答案 5 :(得分: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值更改为所需的值。

答案 6 :(得分:0)

我在styles.xml

中添加了以下填充项AppTheme
<style name="AppTheme" parent="AppBaseTheme">
...
<item name="android:padding">0dp</item>
...
</style>

应用程序清单使用该主题:

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

这解决了我。