2010-01-18 118 views
26

我创建自定义标题的活动禁用标准的一个和自己管理一切。我想知道是否可以用我的需求替换/主题标准标题。自定义标题与图像

我可以通过更改windowXYZStyle项目来自定义大小,背景图像和文本。

我唯一无法找到的东西 - 我如何添加图像而不是文本。 我试过requestWindowFeature(Window.FEATURE_CUSTOM_TITLE) 并分配自定义布局 - 但它似乎不工作。

编辑:这里是测试建议的报告,代码在下面 - 结果 - 图像视图没有显示出来。

活动

public class SettingsActivity extends PreferenceActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
     getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.custom_title); 
     super.onCreate(savedInstanceState); 
     addPreferencesFromResource(R.xml.settings); 

    } 
} 

XML : 

<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/title" 
    android:layout_width="fill_parent" 
    android:layout_height="26dip" 
    android:paddingLeft="5dip" 
    android:background="@drawable/titlebar_bg" 
    android:layout_gravity="left|center" 
> 
    <ImageView 
     android:id="@+id/logo" 
     android:src="@drawable/title_logo" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

回答

35

可以设置自己的自定义标题布局,但是执行顺序很重要。您必须按以下顺序执行操作:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.my_layout); 
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.my_custom_title); 

此外,您可能需要增加标题的大小;如果你不这样做,那么你的自定义布局的底部可能只是被你的Activity所掩盖。您可以通过添加指定标题大小的主题来更改大小。这将进入一个值的XML文件:

<resources> 
    <style name="LargeTitleTheme"> 
     <item name="android:windowTitleSize">40dip</item> 
    </style> 
</resources> 

然后,你需要设置主题为您的活动(或应用程序,如果你想整个应用程序有这个自定义标题栏)在AndroidManifest.xml:

<activity android:name=".MyCustomTitleActivity" android:theme="@style/LargeTitleTheme" /> 
+0

嘿丹尼尔,谢谢你的回复,我在提问之前就这样做了。已经很晚了 - 所以我可能会搞砸了。你试过这个吗?在扩展PreferencesActivity的活动中尝试一下,my_custom_title上有一个自定义的背景和徽标(对于图像视图) - 对我来说,它确实分配了自定义标题和文本视图 - my_custom_title中的图像视图 - 没有。同样适用于背景 - 这可以通过向LargeTitleTheme添加更多项目来解决。 – 2010-01-18 16:46:54

+0

我已经完成了上面概述的内容(我从源代码中获取了示例代码)。但是,我从来没有在PreferencesActivity上试过它;也许还有一些你必须做的,以覆盖标题栏。我不知道我现在明白你的问题是什么;重申? – 2010-01-18 17:07:53

+0

问题在于图像视图未显示在自定义标题中。而我需要拍一个带有徽标的图像而不是文字。 – 2010-01-18 17:24:58

6

你总是可以使用:

requestWindowFeature(Window.FEATURE_NO_TITLE); 

然后创建活动的意见里面你自己的标题栏。

+0

是啊,这正是我现在做的事情。我认为有一种主题标准的方法。 例如标题栏中的优先活动。为了标题栏的缘故,我真的不想搞乱自定义布局。 – 2010-01-18 16:20:57

+2

我开始认为这可能是最好的选择。首先,它会避免应用程序打开时标题栏闪烁,以及我需要用来从包含图层删除边距的黑客解决方法,以便在标题栏周围看不到灰色边框。 – Casebash 2010-04-28 05:14:14

1

您确定需要在标题中使用图片,而不是将其作为背景图片的一部分并将标题留空吗?使用NinePatch图片,我希望你能够获得一个无论设备如何都可以看起来很好的结果?

1

我用下面的代码,以适应我的自定义标题屏幕

<ImageView 
    android:id="@+id/header_img" 
    android:src="@drawable/header_img" 
    android:layout_width="700dip" 
    android:layout_height="70dip" />