一个接着一个的activity,写啊写,调啊调,后来,终于发觉,activity的标题栏好难看,好单调啊。咱们为了吸引用户的眼球,得搞点个性化的东西。
自定义标题栏的方法,网上一搜一大堆,我也稍微提一下,oncreate中加上如下代码就行:
-
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
-
setContentView(view);
-
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,R.layout.title);
这个名为title的layout是这样子的,很简单,就是一个textview,然后有个背景色:
-
<?xmlversion="1.0"encoding="utf-8"?>
-
<LinearLayoutxmlns: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 -->的下面。
-
<itemname="windowTitleBackgroundStyle">@android:style/WindowTitleBackground</item>
然后去styles.xml下找到WindowTitleBackground项,
-
<stylename="WindowTitleBackground">
-
<itemname="android:background">@android:drawable/title_bar</item>
-
</style>
发现是一个drawable,xml的,里面定义了背景图片。ok,我们知道了,这个是定义titlebar的背景色。
然后,去values下面的themes.xml找到windowContentOverlay,也是属于window attributes。
-
<itemname="windowContentOverlay">@android:drawable/title_bar_shadow</item>
发现也是个drawable,ok,我们也知道了,这个是定义contentoverlay的背景的。
其实,通过研究我发现,不能填充满的原因是title_container的背景的原因,我们覆盖一下就行了。
首先,写个themes文件
-
<resources>
-
<stylename="XTheme"parent="android:Theme">
-
-
-
<itemname="android:windowTitleStyle">@style/XWindowTitle</item>
-
<itemname="android:windowTitleBackgroundStyle">@style/StatusBarBackground</item>
-
<itemname="android:windowContentOverlay">@null</item>
-
</style>
-
</resources>
然后写styles文件
-
<resources>
-
<stylename="StatusBarBackground">
-
<itemname="android:background">@drawable/shape</item>
-
</style>
-
-
<stylename="XWindowTitle"parent="android:WindowTitle">
-
<itemname="android:shadowColor">#BB000000</item>
-
<itemname="android:shadowRadius">0</item>
-
</style>
-
</resources>
注意这个XWindowTitle要继承WindowTitle。
最后,在manifext中给自定义的activity申明主题。
-
<activityandroid:name=".Entry"
-
android:label="@string/app_name"
-
android:theme="@style/XTheme">
-
<intent-filter>
-
<actionandroid:name="android.intent.action.MAIN"/>
-
<categoryandroid:name="android.intent.category.LAUNCHER"/>
-
</intent-filter>
-
</activity>
好,我们来看看效果吧:
so cool, isn't it?
分享到:
相关推荐
android自定义标题栏源码,自定义view
Android自定义标题栏,需要的童鞋可以下来看看。
xamarin android自定义标题栏,希望能够帮助到大家。。
Android自定义顶部标题栏Android自定义顶部标题栏Android自定义顶部标题栏Android自定义顶部标题栏Android自定义顶部标题栏Android自定义顶部标题栏Android自定义顶部标题栏Android自定义顶部标题栏Android自定义...
自定义标题栏 修该 高度 以及 处理没有完全填充bug。
android studio 自定义标题栏,自定义回退按钮事件,自定义右侧显示文字还是图片,自定义右侧点击事件
android 自定义标题栏 CAD如何快速自定义标题栏.docx
Android自定义标题栏(并加入返回按钮)的demo
看IOS上的应用,应用中状态栏的颜色总能与应用标题栏颜色保持一致,用户体验很不错,对于这种效果怎么实现的呢?下面小编给大家分享android自定义状态栏颜色与应用标题栏颜色一致的实现方法,一起看看吧
如题,android自定义标题栏。 http://blog.csdn.net/yanjunhui2011/article/details/64482976 对应资源
Android实现自定义标题栏的高度化自定义
Android复合控件学习之自定义标题栏;学习自定义属性、接口回调等知识点
前段时间android项目中用到一个可以滑动的数量可变的导航栏,在网上也没找到合适的替代品,所以就自定义了个该控件,在此分享一下该控件,给有需要的人。
应用中状态栏的颜色与应用标题栏颜色保持一致,提高用户体验