`
rensanning
  • 浏览: 3514211 次
  • 性别: Icon_minigender_1
  • 来自: 大连
博客专栏
Efef1dba-f7dd-3931-8a61-8e1c76c3e39f
使用Titanium Mo...
浏览量:37481
Bbab2146-6e1d-3c50-acd6-c8bae29e307d
Cordova 3.x入门...
浏览量:604342
C08766e7-8a33-3f9b-9155-654af05c3484
常用Java开源Libra...
浏览量:678107
77063fb3-0ee7-3bfa-9c72-2a0234ebf83e
搭建 CentOS 6 服...
浏览量:87280
E40e5e76-1f3b-398e-b6a6-dc9cfbb38156
Spring Boot 入...
浏览量:399819
Abe39461-b089-344f-99fa-cdfbddea0e18
基于Spring Secu...
浏览量:69075
66a41a70-fdf0-3dc9-aa31-19b7e8b24672
MQTT入门
浏览量:90487
社区版块
存档分类
最新评论

Cordova Android中ShowTitle的问题

阅读更多
根据官方文档的描述,要想显示TitleBar需要在config.xml中做如下设置(默认是false):
引用
<preference name="ShowTitle" value="true"/>


http://cordova.apache.org/docs/en/3.4.0/guide_platforms_android_config.md.html#Android%20Configuration

但是把这个值设置成true的时候,Android应用也无法显示TitleBar!

查看Android模板代码的AndroidManifest.xml文件,发现在第36行有如下设置:
引用
android:theme="@android:style/Theme.Black.NoTitleBar"


https://github.com/apache/cordova-android/blob/3.4.x/bin/templates/project/AndroidManifest.xml

意味着默认是不显示TitleBar的,和文档说明吻合,也就是说代码中应该有能显示出来TitleBar的地方。

继续看Cordova中唯一的Activity,在第225-228行可以看出,如果没有设置ShowTitle或者设置成了false的话,会隐藏TitleBar。但是没有说如果为true的时候应该把TitleBar再显示出来。
if(!this.getBooleanProperty("ShowTitle", false))
{
  getWindow().requestFeature(Window.FEATURE_NO_TITLE);
}


https://github.com/apache/cordova-android/blob/3.4.x/framework/src/org/apache/cordova/CordovaActivity.java

查看了一下AndroidManifest.xml的修改历史记录,在“Sep 18, 2012”,为了对应CB-1126(改善Splashscreen的显示)在AndroidManifest.xml中添加了NoTitleBar的theme。但是同时可以看出修改记录没有对应何时能把TitleBar显示出来。Fix Version是2.2.0。不过显示TitleBar在Hybrid app中已经不是很经常用到的功能了。

https://github.com/apache/cordova-android/commit/451688a12e1eb43303601be357d9c40fd4cf1ce5

修改方法:
if(!this.getBooleanProperty("ShowTitle", false)) {
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
} else {
    setTheme(android.R.style.Theme_Black);
}

首先修改CordovaActivity.java,添加当“ShowTitle”被设置成true的时候,显示TitleBar。


但是Android4.0开始UI有大幅的变化,TitleBar也不是看到的这个样子,所以还需要要特殊处理一下:
if(!this.getBooleanProperty("ShowTitle", false)) {
    getWindow().requestFeature(Window.FEATURE_NO_TITLE);
} else {
    if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
    	setTheme(android.R.style.Theme_Black);
    } else {
    	setTheme(android.R.style.Theme_DeviceDefault);
    }
}


http://developer.android.com/reference/android/R.style.html#Theme_DeviceDefault

TitleBar显示出来了,还需要考虑是否会对SplashScreen有影响,查看CordovaActivity的showSplashScreen()方法,发现事实它是new了个Dialog并设置了Theme_Translucent_NoTitleBar的,所以不用考虑会影响SplashScreen是否会显示TitleBar了。

同时TitleBar还牵扯到ActionBar的问题,Cordova里也没有对应。
参考:http://stackoverflow.com/questions/22038657/show-actionbar-in-android-phonegap-project
  • 大小: 2.1 KB
  • 大小: 8 KB
  • 大小: 9 KB
  • 大小: 31.5 KB
  • 大小: 10.9 KB
  • 大小: 11.6 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics