自定义标题实质是自定义主题中的自定义标题。
步骤分为:自定义主题-->清单中配置该主题-->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!");/*修改自定义布局中的组件*/
}
/ 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>