2015-04-07 47 views
3

在我的公司,我们正在使用Ionic Framework和Cordova创建我们的移动应用程序,并且在开始设计应用程序时,我们遇到了Android主题的问题以及如何在没有触摸由Ionic生成命令生成的AndroidManifest。从cordova config.xml更改Android主题

无处不在我建议从config.xml文件实现任何定制,并且不要触摸AndroidManifest,但我似乎找不到有关Android主题的任何方法。

我现在给你的问题:有没有办法从Config.xml中为应用程序设置Android主题,例如Holo Theme,而不更改生成的AndroidManifest.xml?

回答

4

要避免触摸平台目录,可以使用cordova hook。我在节点上非常糟糕,但是这里应该有所斩获。首先npm install elementtree然后在钩子文件夹中创建一个子文件夹after_prepare。从那里把这个代码粘贴到一个JavaScript文件并更改YourTheme。

老实说,这是一些非常粗糙的代码,但应该给你这个想法。

#!/usr/bin/env node 
var fs = require("fs"); 
var et = require('elementtree'); 
var rootdir = process.argv[2]; 
console.log(rootdir); 
fs.open(rootdir + '/platforms/android/AndroidManifest.xml', 'r+', 
    function (err, fd) { 
     if (err) { 
      exitError(err); 
     } 
     fs.stat(rootdir + '/platforms/android/AndroidManifest.xml', getStats); 

     function getStats(error, stats) { 
      if (error) { 
       exitError(error); 
      } 
      var buffer = new Buffer(stats.size); 
      fs.read(fd, buffer, 0, buffer.length, null, fileRead); 
     } 

     function fileRead(error, bytes, buf) { 
      var data = buf.toString("utf8", 0, buf.length); 
      var androidXML = et.parse(data); 
      var root = androidXML.getroot(); 
      var activityTag = root.find("application/activity"); 
      activityTag.attrib["android:theme"] = "@style/YourTheme"; 
      var outputBuffer = new Buffer(et.tostring(root), "utf-8"); 
      console.log(outputBuffer.toString()); 
      fs.closeSync(fd); 
      fs.open(rootdir + '/platforms/android/AndroidManifest.xml', 'w', writeFile); 
      function writeFile(error, fd) { 
       if (error) { 
        exitError(error); 
       } 
       fs.write(fd, outputBuffer, 0, outputBuffer.length, 0, function(errw, written, str) { 
        if (errw) { 
         exitError(errw); 
        } 
        console.log('file written'); 
        fs.close(fd); 
       }); 
      } 

     } 
    }); 

function exitError(error) { 
    console.log(error); 
    process.exit(0); 
} 
+1

我想过使用一个钩子,但不应该有我们可以添加到config.xml文件来改变这样的事情吗?考虑到phonegap build具有编写定制xml的功能,该功能将与AndroidManifest.xml –

+1

合并。再次,可以通过挂钩完成。多了一点点后,似乎这个文件增加了一些不错的功能(包括主题):https://github.com/djett41/generator-ionic/blob/master/templates/hooks/after_prepare/update_platform_config.js – laughingpine

+1

哦非常好,我用发生器捅了一下,但没有看到这些钩子。它为新的配置可能性打开了大门。谢谢您的帮助 ! –

4

我知道我迟到了,但cordova-custom-config插件做只是为了“基于在config.xml中定义的偏好和配置文件中的数据更新平台的配置文件。”

例如:

  1. 安装cordova-custom-config插件:cordova plugin add cordova-custom-config --save

  2. 的Config.xml: “:主题机器人” 你AndroidManfiset <preference name="android-manifest/application/activity/@android:theme" value="@android:style/Theme.Holo"/>

这将属性添加 - >应用程序 - >活动,值为:@android:style/Theme.Holo