在我的公司,我们正在使用Ionic Framework和Cordova来创建我们的移动应用程序,在开始设计应用程序时,我们遇到了Android主题的问题,以及如何设置它而不触及Ionic build命令生成的AndroidManifest
无处不在我看来建议从config.xml文件实现任何自定义,永远不要触摸AndroidManifest,但我似乎找不到任何关于Android主题的方法。
我现在向您提问:有没有办法在不更改AndroidManifest.xml生成的情况下从Config.xml为应用程序设置android主题,例如Holo Theme?
答案 0 :(得分:5)
我知道我迟到了,但是cordova-custom-config
插件只根据config.xml中定义的首选项和配置文件数据来更新平台配置文件。"
例如:
安装cordova-custom-config插件:cordova plugin add cordova-custom-config --save
Config.xml:<preference name="android-manifest/application/activity/@android:theme" value="@android:style/Theme.Holo"/>
这将添加属性&#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" />
答案 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">