解决android自定义标题栏充满的问题 博客分类: Android AndroidEclipseXMLvimGit

        一个接着一个的activity,写啊写,调啊调,后来,终于发觉,activity的标题栏好难看,好单调啊。咱们为了吸引用户的眼球,得搞点个性化的东西。         自定义标题栏的方法,网上一搜一大堆,我也稍微提一下,oncreate中加上如下代码就行:

requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(view);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title);

         这个名为title的layout是这样子的,很简单,就是一个textview,然后有个背景色:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#66cccccc"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:text="hello"
    />
</LinearLayout>

         好,运行看效果。看到了吧,发现问题了没,标题栏的背景色没有填充满是吧,这可真是杯具哟。padding、margin什么的都用上也不管用,怎么办呢。     看源码!         window初始化,加载标题的地方,咱也不知道在哪里,不过咱能以layout作为切入点。打开源码里面的layout文件夹,找跟标题栏相关的xml文件。里面有screen_title.xml和screen_custom_title.xml,这就是咱们要找的目标了。         既然是自定义标题,那我们就看screen_custom_title.xml,里面有一个title_container和一个content,组合成了标题栏,我们自定义标题所给出的view,都被content作为子view了,影响不了那个title_container和content,所以,任你怎么弄,它该留白的还是留白,你没招。     看title_container有个style是这样的:style="?android:attr/windowTitleBackgroundStyle"     content的foreground是这样的android:foreground="?android:attr/windowContentOverlay"     好,从这里我们就可以入手改了。

去values下面的themes.xml找到windowTitleBackgroundStyle这一项,这个应该在注释<!-- Window attributes -->的下面。

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

然后去styles.xml下找到WindowTitleBackground项,

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

发现是一个drawable,xml的,里面定义了背景图片。ok,我们知道了,这个是定义titlebar的背景色。

    然后,去values下面的themes.xml找到windowContentOverlay,也是属于window attributes。

<item name="windowContentOverlay">@android:drawable/title_bar_shadow</item>

    发现也是个drawable,ok,我们也知道了,这个是定义contentoverlay的背景的。     其实,通过研究我发现,不能填充满的原因是title_container的背景的原因,我们覆盖一下就行了。

首先,写个themes文件

<resources>
    <style name="XTheme" parent="android:Theme">    
    	
        <!-- Window attributes -->
        <item name="android:windowTitleStyle">@style/XWindowTitle</item>   
        <item name="android:windowTitleBackgroundStyle">@style/StatusBarBackground</item>     
        <item name="android:windowContentOverlay">@null</item>
	</style>	
</resources>

然后写styles文件

<resources>    
    <style name="StatusBarBackground">
        <item name="android:background">@drawable/shape</item>
    </style>
            
    <style name="XWindowTitle" parent="android:WindowTitle">
        <item name="android:shadowColor">#BB000000</item>
        <item name="android:shadowRadius">0</item>
    </style>
</resources>

注意这个XWindowTitle要继承WindowTitle。

   最后,在manifext中给自定义的activity申明主题。

       <activity android:name=".Entry"
                  android:label="@string/app_name"
                  android:theme="@style/XTheme">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

好,我们来看看效果吧:

      so cool, isn't it?

      当然,你也可以换成别的颜色或者是更炫的图片做背景。

详细实例代码见附件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏cnblogs

如何写好css系列之button

      现代前端行业的发展,如果你在css的时候,还没有利用一些预编译工具,是否觉得自己太low了。但你是否考虑过搭建一套自己前端框架。可能你会想这是否有必...

24770
来自专栏数据小魔方

think-cell chart系列19——任务甘特图

今天跟大家分享think-cell chart系列19——任务甘特图。 甘特图在之前的教程中曾经讲过,当时是在excel中制作完成的,花费了相当多的时间和功夫。...

1K70
来自专栏DeveWork

Google官方网页载入速度检测工具PageSpeed Insights 使用教程

相信有接触前端开发的大神们都听说过Google官方的PageSpeed Tools,这个网页载入速度检测工具有在线版本也有一个 Chrome 扩展,叫PageS...

74080
来自专栏Golang语言社区

nwui —— 又一个go语言图形界面解决方案

Github: https://github.com/go-nwui/nwui 最近开的一个大坑,具体实现就是自动生成htm+css+js然后调用nw.js来显...

28830
来自专栏前端说吧

CSS-自定义高度的元素背景图如何自适应以及after伪类在ie下的处理

34080
来自专栏逸鹏说道

前端常用插件

插件 parallel.js: 前后端通用的一个并行库 zepto: 用于现代浏览器的兼容 jQuery 的库 totoro: 稳定的跨浏览器测试工具 Thea...

74860
来自专栏pangguoming

一看就懂的ReactJs入门教程(精华版)

现在最热门的前端框架有AngularJS、React、Bootstrap等。自从接触了ReactJS,ReactJs的虚拟DOM(Virtual DOM)和组件...

43260
来自专栏吴老师移动开发

Flutter ScrollView上拉加载更多关于学习

2018.05.07 更新 上拉加载可以不用Notification,直接用ScrollController,代码如下:

69930
来自专栏星回的实验室

使用Headless Browser渲染页面

忙了很长一段时间,需要浮出水面来总结一工作了,不然做过的东西就像翻过一页完全没有记住的书,难免徒劳。

11120
来自专栏用户2442861的专栏

chrome使用技巧(看了定不让你失望,不错)

之前有看过刘哇勇写的Chrome 控制台不完全指南,让我觉得瞬间对chrome的了解实在太浅了。对此特意了解了一番(也就是在他的博文上进行了一些总结和了解一些其...

16210

扫码关注云+社区

领取腾讯云代金券