2 u010108610 u010108610 于 2013.12.26 17:13 提问

android自定义标题栏总是出错

采用网上说的自定义标题栏的方法:

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正常。。试了很多次都这样。急!

1个回答

cjopengler
cjopengler   2013.12.26 17:56

问题的原因是因为在 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写的很清楚。

希望能帮到你。

Amily_BIN
Amily_BIN 为什么初次运行工程的时候会先闪过一个页面,在这个页面的actionBar部分显示的是app_name的内容,然后再出现自己定义的页面内容?
接近 3 年之前 回复
cjopengler
cjopengler 请 点击 顶!!! 谢谢:)
接近 4 年之前 回复
u010108610
u010108610 谢谢!!!非常感谢!!
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片