自定义标题定义为布局:有没有办法通过样式/主题设置它?

Posted

技术标签:

【中文标题】自定义标题定义为布局:有没有办法通过样式/主题设置它?【英文标题】:Custom title defined as layout: is there a way to set it via styles/theme? 【发布时间】:2013-04-15 11:27:50 【问题描述】:

如果我使用样式定义自定义主题:

<style name="MyTheme" parent="android:Theme">
    <item name="android:windowTitleSize">@dimen/title_bar_height</item>
    <item name="android:windowTitleBackgroundStyle">@drawable/titilebar_bg</item>
    <item name="android:windowBackground">@drawable/bg_page</item> 
</style>

我还有一个特殊的titlebar.xml,它定义了我的标题栏(按钮、图标、文本等)有没有办法将此布局设置为样式中标题栏的默认布局(就像所有活动的默认行为) ?

这样我不必在每个活动中添加以下代码(实际上是所有活动):

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

我能看到的唯一方法是将 Activity 子类化以继承方法,该方法将在 onCreate()/setContentView() 中生成 requestWindowFeature()。但这并不是我要问的。

【问题讨论】:

【参考方案1】:

样式.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
     <style name="CustomWindowTitleBackground">
        <item name="android:background">#000000</item>
    </style>

    <style name="CustomTheme" parent="android:Theme">
        <item name="android:windowTitleSize">35dip</item>
        <item name="android:windowTitleBackgroundStyle">@style/CustomWindowTitleBackground</item>
    </style>
</resources>       

Mainfest.xml

<application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/CustomTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>

【讨论】:

你是想说我所要做的就是将我的titlebar.xml重命名为Title.xml吗?因为我在这里看不到 Title.xml 和 Styles 之间的任何联系,这是我的问题的重点,而不是 requestWindowFeature() 的东西。 使用Mainfest.xml和Styles.xml,两者都可以通过Application实现Custom Title。我用过Title.xml不是必须的。 谢谢,但我知道。问题不在于如何使用自定义主题或自定义标题。它是关于使用我的 titlebar.xml 布局作为整个应用程序的标题。问题是如何做到这一点,以便不需要在每个活动中调用 requestWindowFeature() 方法,然后我在所有活动中使用相同的标题。所以我猜我可以以某种方式在styles.xml中设置我的titlebar.xml,这就足够了。

以上是关于自定义标题定义为布局:有没有办法通过样式/主题设置它?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法在Android Studio布局编辑器中看到应用于操作栏的自定义布局?

如何:为自定义小部件定义主题(样式)项

如何使用 Laravel 制作自定义主题以及在哪里存储主题数据?

自定义主题样式组件的打字稿

Android ActionBar 自定义布局样式

自定义博客园主题样式