android 自定义标题栏

本文介绍了如何在Android中自定义标题栏,包括在自定义主题中配置样式,然后在清单文件中应用该主题,并在onCreate()方法中设置特征。自定义过程涉及覆盖windowTitleBackgroundStyle以定义所需背景,并解决背景显示不全的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自定义标题实质是自定义主题中的自定义标题。

步骤分为:自定义主题-->清单中配置该主题-->oncreate()设置特征

1.自定义主题

<style name="MyTestWindowTitleStyle"></style>

    <style name="MyTestStyle" parent="android:Theme.Light">
        <item name="android:windowTitleBackgroundStyle">@style/MyTestWindowTitleStyle</item>
    </style>
2.在清单中配置style

这个可以配置在application中,也可以配置在activity中。

3.activity中设置布局

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);/*设置窗口特征*/
        setContentView(R.layout.activity_main);
        getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.basetitle);/*自定义布局*/
//        ((TextView)findViewById(R.id.tv_title)).setText("Nice Day!");/*修改自定义布局中的组件*/
    }


theme 主题作为API 10及其以下应用的默认主题,用于没有明确设置自己主题的activities。如果开发的API 在11或更高,应该使用Theme_Holo或Theme_DeviceDefault代替。

/ frameworks / base / core / res / res / layout / screen_custom_title.xml

<pre style="background-color: rgb(255, 255, 255);"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:fitsSystemWindows="true">
    <FrameLayout android:id="@android:id/title_container" 
        android:layout_width="match_parent" 
        android:layout_height="?android:attr/windowTitleSize"
        style="?android:attr/windowTitleBackgroundStyle">
    </FrameLayout>
    <FrameLayout android:id="@android:id/content"
        android:layout_width="match_parent" 
        android:layout_height="0dip"
        android:layout_weight="1"
        android:foregroundGravity="fill_horizontal|top"
        android:foreground="?android:attr/windowContentOverlay" />
</LinearLayout>

 可以看到标题的背景样式:windowTitleBackgroundStyle。在theme 中 

<item name="windowTitleBackgroundStyle">@style/WindowTitleBackground</item>

<style name="WindowTitleBackground">
        <item name="background">@drawable/title_bar</item>
    </style>
<!-- title_bar -->
<nine-patch xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/activity_title_bar"
    android:dither="true"
/>

因此修改标题栏样式,需要覆盖windowTitleBackgroundStyle,在里面定义需要的背景之类的。


1.遇到背景显示不全,需要在样式中添加高度:

     <item name="android:windowTitleSize">@dimen/dp_32</item>

附上Theme 的window属性:
 <!-- Window attributes -->
        <item name="windowBackground">@drawable/screen_background_selector_dark</item>
        <item name="windowBackgroundFallback">?attr/colorBackground</item>
        <item name="windowClipToOutline">false</item>
        <item name="windowFrame">@null</item>
        <item name="windowNoTitle">false</item>
        <item name="windowFullscreen">false</item>
        <item name="windowOverscan">false</item>
        <item name="windowIsFloating">false</item>
        <item name="windowContentOverlay">@null</item>
        <item name="windowShowWallpaper">false</item>
        <item name="windowTitleStyle">@style/WindowTitle</item>
        <item name="windowTitleSize">25dip</item>
        <item name="windowTitleBackgroundStyle">@style/WindowTitleBackground</item>
        <item name="windowAnimationStyle">@style/Animation.Activity</item>
        <item name="windowSoftInputMode">stateUnspecified|adjustUnspecified</item>
        <item name="windowActionBar">false</item>
        <item name="windowActionModeOverlay">false</item>
        <item name="windowCloseOnTouchOutside">false</item>
        <item name="windowTranslucentStatus">false</item>
        <item name="windowTranslucentNavigation">false</item>
        <item name="windowDrawsSystemBarBackgrounds">false</item>
        <item name="statusBarColor">@color/black</item>
        <item name="navigationBarColor">@color/black</item>
        <item name="windowActionBarFullscreenDecorLayout">@layout/screen_action_bar</item>
        <item name="windowContentTransitions">false</item>
        <item name="windowActivityTransitions">false</item>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值