我的个人小站开始发布啦,欢迎来逛逛:http://martinhan.site

首先我们在app的build.gradle下面加入如下代码,以oem1为示例,

productFlavors {        oem1 {            manifestPlaceholders = [                    oemIcon : "@drawable/oem1",            ]        }}

以上代码 manifestPlaceholders 主要是用于在AndroidManifest.xml内可以动态的替换oem图标,我们看AndroidManifest.xml里面是如何用到这oemIcon的

<application        android:allowBackup="true"        android:icon="${oemIcon}"        android:label="@string/app_name"        android:supportsRtl="true"        android:theme="@style/AppTheme">

以上代码主要是关注android:icon="${oemIcon}" ,这个其实在gradle打包后悔自动替换成我们在build.gradle里面设置的‘@drawable/oem1’,这样就可以根据不同渠道包替换成不同的icon

动态替换文字

首先在build.gradle里面配置我们需要的文字

productFlavors {        oem1 {            resValue("string","dynamic_text","oem1的动态文字")            manifestPlaceholders = [                    oemIcon : "@drawable/oem1",            ]        }}

注意:我们的string.xml里面不允许有dynamic_text字段,有的话编译会报错.

主要是resValue一行我们详细解释一下,
string表示的是我们要生成一个string字段,
dynamic_text指的是字段名称便于我们程序里面使用,
"oem1的动态文字"指的是我们的字符串的值

其实这一句想相当于我们在string.xml里面定义如下一行

<string name="dynamic_text">oem1的动态文字string>

动态替换资源文件

如果在程序中我们有一个地方需要根据不同的渠道对应不同的drawable,我们就可以用下列方法,下列方法是假设程序中有一处需要设置图片,思路是我们首先在gradle里面设置好值,在AndroidManifest.xml里面使用META_DATA,然后再从程序里面调用

build.gradle如下

 productFlavors {        oem1 {            manifestPlaceholders = [                    oemIcon : "@drawable/oem1",            ]        } }

AndroidManifest.xml如下

<meta-data            android:name="OEM_LOGO"            android:resource="${oemIcon}"            />

java程序如下
MainActivity.java

img.setImageResource(Util.getMetaDataInt(this,"OEM_LOGO"));

Util.java

public class Util {    public static int getMetaDataInt(Context context,String name) {        try {            ApplicationInfo appInfo = context.getApplicationContext().getPackageManager()                    .getApplicationInfo(context.getApplicationContext().getPackageName(),                            PackageManager.GET_META_DATA);            int logo = appInfo.metaData.getInt(name);            return logo;        } catch (Exception e) {            e.printStackTrace();        }        return -1;    }}

主要思路就是利用META_DATA来货渠道资源的int值并且返回到程序中,达到动态生成的目的

源码地址,点击进入

更多相关文章

  1. android开发中遇到的问题汇总【三】
  2. Android离线身份证等图片文字识别
  3. Android用户界面 UI组件--TextView及其子类(三) EditView以及各
  4. android spinner自定义背景文字显示不全解决办法
  5. Android(安卓)- 动态设置自定义View的id - setId
  6. (4.2.32.2)android热修复之ClassLoader方式:Android(安卓)热补丁动
  7. ConstraintLayout 在代码中动态设置约束
  8. 动态文字闪烁效果
  9. Android(安卓)4.1 动态加载APK中的资源

随机推荐

  1. MySQL不使用order by实现排名的三种思路
  2. MySQL连接查询你真的学会了吗?
  3. MySQL 8.0 Online DDL快速加列的相关总结
  4. MySQL 常见存储引擎的优劣
  5. Mysql文件存储图文详解
  6. 一文读懂navicat for mysql基础知识
  7. Mysql数据库索引面试题(程序员基础技能)
  8. MySQL CHAR和VARCHAR该如何选择
  9. 带你学习MySQL执行计划
  10. MySQL完整性约束的定义与实例教程