教你怎么做可以换皮肤的软件
16lz
2021-01-26
网上找了很久,未果。
偶然的机会,看到aiMinesweeper.HelloSkin的AndroidManifest.xml里有那么一个属性:android:sharedUserId="com.artfulbits.aiminesweeper"
顿时感到看到了阳光,马上google了一下,发现了关键的地方。
SharedUserid
拥有同一个User id的多个APK可以配置成运行在同一个进程中,所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件,就像访问本程序的数据一样。
哈哈,这个就是我要找的东西,马上开始试验。
工程1(主工程)
只有1个画面,包含1个为了测试用的button
AndroidManifest.xml
MainActivity
drawable下放一张名为btn_background.pnd的图片
工程2(皮肤工程)
AndroidManifest.xml
drawable下也放一张名为btn_background.png的图片(换成xml文件就可以实现不同状态不同图片的功能)
把2个工程都安装到模拟器上以后,运行工程1,button上的图片果然是工程2中的btn_background.png,终于成功了。
测试代码(主工程和皮肤工程)已上传,没写注释望见谅。
偶然的机会,看到aiMinesweeper.HelloSkin的AndroidManifest.xml里有那么一个属性:android:sharedUserId="com.artfulbits.aiminesweeper"
顿时感到看到了阳光,马上google了一下,发现了关键的地方。
SharedUserid
拥有同一个User id的多个APK可以配置成运行在同一个进程中,所以默认就是可以互相访问任意数据。也可以配置成运行成不同的进程,同时可以访问其他APK的数据目录下的数据库和文件,就像访问本程序的数据一样。
哈哈,这个就是我要找的东西,马上开始试验。
工程1(主工程)
只有1个画面,包含1个为了测试用的button
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.test.android.skin.main" android:versionCode="1"android:versionName="1.0" android:sharedUserId="com.test.android.skin"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MainActivity" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
MainActivity
@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);Context friendContext = null;try {friendContext = this.createPackageContext("com.test.android.skin.myskin",Context.CONTEXT_IGNORE_SECURITY);} catch (NameNotFoundException e) {e.printStackTrace();}Button btn = (Button) findViewById(R.id.btn);btn.setBackgroundDrawable(friendContext.getResources().getDrawable(R.drawable.btn_background));}
drawable下放一张名为btn_background.pnd的图片
工程2(皮肤工程)
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.test.android.skin.myskin" android:versionCode="1"android:versionName="1.0" android:sharedUserId="com.test.android.skin"><application android:icon="@drawable/icon" android:label="@string/app_name"><activity android:name=".MainActivity" android:label="@string/app_name"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
drawable下也放一张名为btn_background.png的图片(换成xml文件就可以实现不同状态不同图片的功能)
把2个工程都安装到模拟器上以后,运行工程1,button上的图片果然是工程2中的btn_background.png,终于成功了。
测试代码(主工程和皮肤工程)已上传,没写注释望见谅。
更多相关文章
- Android如何将程序打成jar包
- Android下的Gallery显示技术分析(三)
- Android(安卓)Studio 迁移 AndroidX 遇到 jetifier相关问题的记
- Qt5.12.7 搭建 Android(安卓)开发环境
- Android实现镜花水月的效果
- Android打开手机相册获取图片路径
- React Native 环境变量配置(window7)
- Android(安卓)Webview upload 图片上传
- Android(安卓)Glide设置图片的圆角