采用网上说的自定义标题栏的方法:
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
setContentView(R.layout.main);
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE, R.layout.title_bar);
只要指定了Window.FEATURE_CUSTOM_TITLE则会在setContentView出错,如果去掉第一第三句只执行setContentView正常,第二句和第三句换位置也出错。而换成Window.FEATURE_NO_TITLE正常。。试了很多次都这样。急!
问题的原因是因为在 Android 4.0加入了ActionBar,所以使用这个ID就会出现
“Caused by: android.util.AndroidRuntimeException: You cannot combine custom titles with other title features”
这个异常。
那么解决办法是,在 app的style中增加下面一个标识:
<item name="android:windowActionBar">false</item>
来去掉action bar. 但是这个方法有个限制 就是这个标识必须是api level 11以上的。
具体如下:
<style name="AppTheme" parent="AppBaseTheme">
<item name="android:windowActionBar">false</item> </style>
就可以解决了。
关于这个问题再多说两句,给个建议,一般来讲 自定义titlebar 很可能是因为要和ios保持一致,不管是什么需求,一般不使用Android的自定义title bar来处理。而是使用FEATURE_NO_TITLE 标识,先去掉title bar,然后在你的acitivty layout 布局中 最上面添加一个layout来作为titlebar,其他的向下继续向下布局就好了。
但是这样做会带来一个新的问题,就是多个activity的布局都要处理一下 比较麻烦。所以 将titlebar的定义为一个fragment,那么就实现了灵活 不依赖系统的 可定制 并且统一的title bar了。当然你的activity要继承fragment activity.
具体的fragment使用 可以参考android的sdk文档和api demo写的很清楚。
希望能帮到你。