从cordova config.xml更改android主题

时间:2015-04-07 11:51:49

标签: android xml cordova ionic

在我的公司,我们正在使用Ionic Framework和Cordova来创建我们的移动应用程序,在开始设计应用程序时,我们遇到了Android主题的问题,以及如何设置它而不触及Ionic build命令生成的AndroidManifest

无处不在我看来建议从config.xml文件实现任何自定义,永远不要触摸AndroidManifest,但我似乎找不到任何关于Android主题的方法。

我现在向您提问:有没有办法在不更改AndroidManifest.xml生成的情况下从Config.xml为应用程序设置android主题,例如Holo Theme?

4 个答案:

答案 0 :(得分:5)

我知道我迟到了,但是cordova-custom-config插件只根据config.xml中定义的首选项和配置文件数据来更新平台配置文件。"

例如:

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

  2. Config.xml:<preference name="android-manifest/application/activity/@android:theme" value="@android:style/Theme.Holo"/>

  3. 这将添加属性&#34; android:theme&#34;到你的AndroidManfiset - &gt;申请 - &gt;值为@android:style/Theme.Holo的活动。

答案 1 :(得分:4)

为避免触及平台目录,您可以使用cordova hook。我在节点上非常糟糕,但这里应该可以做到这一点。首先npm install elementtree然后在hooks文件夹中创建一个子文件夹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);
}

答案 2 :(得分:1)

您可以使用Header Color插件:

安装插件:

$ ionic cordova plugin add cordova-plugin-headercolor $ npm install --save @ionic-native/header-color

将配置添加到config.xml <preference name="HeaderColor" value="#becb29" />

https://ionicframework.com/docs/native/header-color/

答案 3 :(得分:0)

自6.3.0起,您无需任何第三方插件即可立即执行此操作。只需将其添加到config.xml

<platform name="android">
    <edit-config file="AndroidManifest.xml" target="/manifest/application/activity[@android:label='@string/activity_name']" mode="merge">
        <activity android:theme="@android:style/Theme.Translucent"></activity>
    </edit-config>
</platform>

对我来说,也有必要在小部件标签中添加'xmlns:android =“ http://schemas.android.com/apk/res/android”'

<widget id="de.bestellkind.restaurant" version="1.0.0" xmlns:android="http://schemas.android.com/apk/res/android" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">