自定义窗口标题

我们看到过很多应用,他们的窗口标题行都不是系统默认的 要么有按钮呀之类的, 具体是怎么实现的呢, 让我们一起来看看吧。

步骤:
1.提供自定义标题界面,如: R.layout.title
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#FFFFFF"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="我是自定义的"
android:background="#FF0000"
/></LinearLayout>

2.在Activity的onCreate()方法中添加如下代码:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE); 
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);

此时的效果如下:
[img]http://dl.iteye.com/upload/attachment/583213/7ea6b4d3-ddcb-3751-803b-8052a4c94b85.jpg[/img]

这时发现虽然标题有背景颜色了。 但是很明显 ,标题分为了两层。 而这时改变的背景只是前面那一部分的背景. 后一部分的还没改变.

我们可以看一下系统窗口标题的界面文件的源代码
<?xml version="1.0" encoding="utf-8"?>
<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>

?android:attr/windowTitleSize
?android:attr/windowTitleBackgroundStyle
?android:attr/windowContentOverlay
上述属性的值为:
<style name="Theme">

</style>

@android:style/WindowTitleBackground:
 <style name="WindowTitleBackground">
<item name="android:background">@android:drawable/title_bar</item>
</style>


很明显我们发现,窗口标题采用了两个帧布局进行叠加.,而我们设置背景的是在上面的比较小的一个帧布局.
那怎呢杨才能完成自定义窗口标题的背景设置呢.
我们可以让前面的背景色为透明,然后让后面的帧布局的背景色设置为我们想要的效果即可

即让 style="?android:attr/windowTitleBackgroundStyle">指向我们自定义的样式
并且让 android:foreground="?android:attr/windowContentOverlay" 改为透明色
既可以实现了

3.我们自己定义一个继承系统默认主题的主题,并且让Activity应用该主题
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="mytheme" parent="android:Theme">
<item name="android:windowContentOverlay">@color/trans</item>
<item name="android:windowTitleSize">38dip</item>
<item name="android:windowTitleBackgroundStyle">@style/myBackground</item>
</style>
<color name="trans">
#00000000
</color>
<color name="mybg">#FFFF00</color>
<style name="myBackground">
<item name="android:background">@color/mybg</item>
</style>
</resources>

效果如下
[img]http://dl.iteye.com/upload/attachment/583238/738be523-28f4-3f40-be1e-1a25a30f7b7c.jpg[/img]


界面粗糙请多海涵, 需要时只需改为需要效果即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值