自定义带图片的标题

27

我正在创建自定义活动标题,禁用标准标题并自己管理一切。我想知道是否可以替换/主题标准标题以满足我的需要。

通过更改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>
4个回答

36

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

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

此外,您可能需要增加标题的大小;如果不这样做,那么您自定义布局的底部可能会被Activity遮盖。您可以通过添加一个指定标题大小的主题来更改大小。这将放置在一个values XML文件中:

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

然后,您需要在AndroidManifest.xml中为您的Activity(如果您希望整个应用程序都具有此自定义标题栏,则为Application)设置主题:

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

我已经按照上面所述的做了(我从我的源代码中取了示例代码)。然而,我以前从未在PreferencesActivity上尝试过它;也许还有一些其他的事情需要做来覆盖标题栏。不过,我现在不确定我是否理解了你的问题;能再说明一下吗? - Dan Lew
问题在于图像视图没有显示在自定义标题中。我需要贴上一个带有标志的图像,而不是文本。 - Alex Volovoy
请更新说明,super.onCreate() 应该在 setFeatureInt 之后调用。这导致我的标题栏很多时候都是空白的。 - James Oltmans
这个可以工作,但是它并不够封装。我的意思是我们必须在三个地方修改代码:活动、样式和清单。 - emeraldhieu
你忘记了主要设置。我该如何让自定义标题栏与之配合?addPreferencesFromResource(R.xml.settings); - Taranfx
显示剩余4条评论

7

您可以始终使用以下内容:

requestWindowFeature(Window.FEATURE_NO_TITLE);

然后在您的Activity的View中创建自己的标题栏。


是的,这正是我现在正在做的事情。我在想是否有一种方法可以为标准主题设置主题。 例如,在首选项活动中的标题栏。我真的不想仅仅为了标题栏而搞乱自定义布局。 - Alex Volovoy
3
我开始认为这可能是最佳选项。首先,这将避免应用程序打开时标题栏闪烁以及我需要使用的巧妙方法来去除包含层中的边距,从而使我看不到标题栏周围的灰色边框。 - Casebash

1
我已使用以下代码将我的自定义标题适应屏幕。
<ImageView
    android:id="@+id/header_img"
    android:src="@drawable/header_img"
    android:layout_width="700dip"
    android:layout_height="70dip" />

1
你确定需要在标题中使用图像,而不是将其作为背景图像的一部分组合并留空标题吗?使用NinePatch图像,我期望您能够实现一个无论在哪个设备上看起来都很好的结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接