2015-04-07 93 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