diff --git a/.gitignore b/.gitignore
index 6b51475..02435e9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,6 @@
.gradle
/local.properties
-/.idea/workspace.xml
-/.idea/libraries
+.idea
*Bak
*BAK
.DS_Store
@@ -9,3 +8,4 @@
/captures
/imooc_changeskin
/imooc_changeskin/*
+*.iml
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index 6fa0197..0000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
deleted file mode 100644
index dae7a60..0000000
--- a/.idea/misc.xml
+++ /dev/null
@@ -1,62 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1.7
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
deleted file mode 100644
index f3c1a86..0000000
--- a/.idea/modules.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
deleted file mode 100644
index f521a50..0000000
--- a/.idea/vcs.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SkinChangeNow.iml b/SkinChangeNow.iml
deleted file mode 100644
index 78ccb9b..0000000
--- a/SkinChangeNow.iml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
deleted file mode 100644
index a4980cb..0000000
--- a/app/app.iml
+++ /dev/null
@@ -1,99 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugAndroidTestSources
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/changeskin/changeskin.iml b/changeskin/changeskin.iml
deleted file mode 100644
index 21729e3..0000000
--- a/changeskin/changeskin.iml
+++ /dev/null
@@ -1,96 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugAndroidTestSources
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/changeskin/src/main/java/com/zhy/changeskin/ResourceManager.java b/changeskin/src/main/java/com/zhy/changeskin/ResourceManager.java
index a9cca8b..1dd23b7 100644
--- a/changeskin/src/main/java/com/zhy/changeskin/ResourceManager.java
+++ b/changeskin/src/main/java/com/zhy/changeskin/ResourceManager.java
@@ -69,12 +69,12 @@ public ColorStateList getColorStateList(String name) {
{
name = appendSuffix(name);
L.e("name = " + name);
- return mResources.getColorStateList(mResources.getIdentifier(name, DEFTYPE_COLOR, mPluginPackageName));
+ return mResources.getColorStateList(mResources.getIdentifier(name, DEFTYPE_DRAWABLE, mPluginPackageName));
} catch (Resources.NotFoundException e)
{
e.printStackTrace();
- return null;
+ return mResources.getColorStateList(mResources.getIdentifier(name, DEFTYPE_COLOR, mPluginPackageName));
}
}
diff --git a/changeskin/src/main/java/com/zhy/changeskin/SkinManager.java b/changeskin/src/main/java/com/zhy/changeskin/SkinManager.java
index c923f8b..3edb791 100644
--- a/changeskin/src/main/java/com/zhy/changeskin/SkinManager.java
+++ b/changeskin/src/main/java/com/zhy/changeskin/SkinManager.java
@@ -14,6 +14,7 @@
import java.io.File;
import java.lang.reflect.Method;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -21,8 +22,7 @@
/**
* Created by zhy on 15/9/22.
*/
-public class SkinManager
-{
+public class SkinManager {
private Context mContext;
private Resources mResources;
private ResourceManager mResourceManager;
@@ -40,23 +40,19 @@ public class SkinManager
private Map> mSkinViewMaps = new HashMap>();
private List mSkinChangedListeners = new ArrayList();
- private SkinManager()
- {
+ private SkinManager() {
}
- private static class SingletonHolder
- {
+ private static class SingletonHolder {
static SkinManager sInstance = new SkinManager();
}
- public static SkinManager getInstance()
- {
+ public static SkinManager getInstance() {
return SingletonHolder.sInstance;
}
- public void init(Context context)
- {
+ public void init(Context context) {
mContext = context.getApplicationContext();
mPrefUtils = new PrefUtils(mContext);
@@ -67,22 +63,19 @@ public void init(Context context)
return;
File file = new File(skinPluginPath);
if (!file.exists()) return;
- try
- {
+ try {
loadPlugin(skinPluginPath, skinPluginPkg, mSuffix);
mCurPluginPath = skinPluginPath;
mCurPluginPkg = skinPluginPkg;
- } catch (Exception e)
- {
+ } catch (Exception e) {
mPrefUtils.clear();
e.printStackTrace();
}
}
- private void loadPlugin(String skinPath, String skinPkgName, String suffix) throws Exception
- {
- //checkPluginParams(skinPath, skinPkgName);
+ private void loadPlugin(String skinPath, String skinPkgName, String suffix) throws Exception {
+ //checkPluginParams(skinPath, skinPkgName);
AssetManager assetManager = AssetManager.class.newInstance();
Method addAssetPath = assetManager.getClass().getMethod("addAssetPath", String.class);
addAssetPath.invoke(assetManager, skinPath);
@@ -93,43 +86,33 @@ private void loadPlugin(String skinPath, String skinPkgName, String suffix) thro
usePlugin = true;
}
- private boolean checkPluginParams(String skinPath, String skinPkgName)
- {
- if (TextUtils.isEmpty(skinPath) || TextUtils.isEmpty(skinPkgName))
- {
+ private boolean checkPluginParams(String skinPath, String skinPkgName) {
+ if (TextUtils.isEmpty(skinPath) || TextUtils.isEmpty(skinPkgName)) {
return false;
}
return true;
}
- private void checkPluginParamsThrow(String skinPath, String skinPkgName)
- {
- if (!checkPluginParams(skinPath, skinPkgName))
- {
+ private void checkPluginParamsThrow(String skinPath, String skinPkgName) {
+ if (!checkPluginParams(skinPath, skinPkgName)) {
throw new IllegalArgumentException("skinPluginPath or skinPkgName can not be empty ! ");
}
}
- public void removeAnySkin()
- {
+ public void removeAnySkin() {
clearPluginInfo();
notifyChangedListeners();
}
-
-
- public boolean needChangeSkin()
- {
+ public boolean needChangeSkin() {
return usePlugin || !TextUtils.isEmpty(mSuffix);
}
- public ResourceManager getResourceManager()
- {
- if (!usePlugin)
- {
+ public ResourceManager getResourceManager() {
+ if (!usePlugin) {
mResourceManager = new ResourceManager(mContext.getResources(), mContext.getPackageName(), mSuffix);
}
return mResourceManager;
@@ -141,16 +124,14 @@ public ResourceManager getResourceManager()
*
* @param suffix
*/
- public void changeSkin(String suffix)
- {
+ public void changeSkin(String suffix) {
clearPluginInfo();//clear before
mSuffix = suffix;
mPrefUtils.putPluginSuffix(suffix);
notifyChangedListeners();
}
- private void clearPluginInfo()
- {
+ private void clearPluginInfo() {
mCurPluginPath = null;
mCurPluginPkg = null;
usePlugin = false;
@@ -158,8 +139,7 @@ private void clearPluginInfo()
mPrefUtils.clear();
}
- private void updatePluginInfo(String skinPluginPath, String pkgName, String suffix)
- {
+ private void updatePluginInfo(String skinPluginPath, String pkgName, String suffix) {
mPrefUtils.putPluginPath(skinPluginPath);
mPrefUtils.putPluginPkg(pkgName);
mPrefUtils.putPluginSuffix(suffix);
@@ -169,8 +149,7 @@ private void updatePluginInfo(String skinPluginPath, String pkgName, String suff
}
- public void changeSkin(final String skinPluginPath, final String pkgName, ISkinChangingCallback callback)
- {
+ public void changeSkin(final String skinPluginPath, final String pkgName, ISkinChangingCallback callback) {
changeSkin(skinPluginPath, pkgName, "", callback);
}
@@ -183,8 +162,7 @@ public void changeSkin(final String skinPluginPath, final String pkgName, ISkinC
* @param suffix
* @param callback
*/
- public void changeSkin(final String skinPluginPath, final String pkgName, final String suffix, ISkinChangingCallback callback)
- {
+ public void changeSkin(final String skinPluginPath, final String pkgName, final String suffix, ISkinChangingCallback callback) {
if (callback == null)
callback = ISkinChangingCallback.DEFAULT_SKIN_CHANGING_CALLBACK;
final ISkinChangingCallback skinChangingCallback = callback;
@@ -192,21 +170,16 @@ public void changeSkin(final String skinPluginPath, final String pkgName, final
skinChangingCallback.onStart();
checkPluginParamsThrow(skinPluginPath, pkgName);
- if (skinPluginPath.equals(mCurPluginPath) && pkgName.equals(mCurPluginPkg))
- {
+ if (skinPluginPath.equals(mCurPluginPath) && pkgName.equals(mCurPluginPkg)) {
return;
}
- new AsyncTask()
- {
+ new AsyncTask() {
@Override
- protected Void doInBackground(Void... params)
- {
- try
- {
+ protected Void doInBackground(Void... params) {
+ try {
loadPlugin(skinPluginPath, pkgName, suffix);
- } catch (Exception e)
- {
+ } catch (Exception e) {
e.printStackTrace();
skinChangingCallback.onError(e);
}
@@ -215,15 +188,12 @@ protected Void doInBackground(Void... params)
}
@Override
- protected void onPostExecute(Void aVoid)
- {
- try
- {
+ protected void onPostExecute(Void aVoid) {
+ try {
updatePluginInfo(skinPluginPath, pkgName, suffix);
notifyChangedListeners();
skinChangingCallback.onComplete();
- } catch (Exception e)
- {
+ } catch (Exception e) {
e.printStackTrace();
skinChangingCallback.onError(e);
}
@@ -233,45 +203,44 @@ protected void onPostExecute(Void aVoid)
}
- public void addSkinView(ISkinChangedListener listener, List skinViews)
- {
- mSkinViewMaps.put(listener, skinViews);
+ public void addSkinView(ISkinChangedListener listener, SkinView... skinViews) {
+ List skinViewsList = mSkinViewMaps.get(listener);
+ if (skinViewsList == null) {
+ skinViewsList = new ArrayList<>();
+ mSkinViewMaps.put(listener, skinViewsList);
+ }
+
+ skinViewsList.addAll(Arrays.asList(skinViews));
+
}
- public List getSkinViews(ISkinChangedListener listener)
- {
+ public List getSkinViews(ISkinChangedListener listener) {
return mSkinViewMaps.get(listener);
}
- public void apply(ISkinChangedListener listener)
- {
+ public void apply(ISkinChangedListener listener) {
List skinViews = getSkinViews(listener);
if (skinViews == null) return;
- for (SkinView skinView : skinViews)
- {
+ for (SkinView skinView : skinViews) {
skinView.apply();
}
}
- public void addChangedListener(ISkinChangedListener listener)
- {
+ public void addChangedListener(ISkinChangedListener listener) {
mSkinChangedListeners.add(listener);
}
- public void removeChangedListener(ISkinChangedListener listener)
- {
+ public void removeChangedListener(ISkinChangedListener listener) {
mSkinChangedListeners.remove(listener);
mSkinViewMaps.remove(listener);
}
- public void notifyChangedListeners()
- {
- for (ISkinChangedListener listener : mSkinChangedListeners)
- {
+ public void notifyChangedListeners() {
+ for (ISkinChangedListener listener : mSkinChangedListeners) {
listener.onSkinChanged();
}
}
diff --git a/changeskin/src/main/java/com/zhy/changeskin/attr/SkinAttrSupport.java b/changeskin/src/main/java/com/zhy/changeskin/attr/SkinAttrSupport.java
index 8829b2a..91fa70f 100644
--- a/changeskin/src/main/java/com/zhy/changeskin/attr/SkinAttrSupport.java
+++ b/changeskin/src/main/java/com/zhy/changeskin/attr/SkinAttrSupport.java
@@ -29,6 +29,11 @@ public static List getSkinAttrs(AttributeSet attrs, Context context)
if (attrValue.startsWith("@"))
{
int id = Integer.parseInt(attrValue.substring(1));
+
+ if (id == 0) {
+ continue;
+ }
+
String entryName = context.getResources().getResourceEntryName(id);
L.e("entryName = " + entryName);
diff --git a/changeskin/src/main/java/com/zhy/changeskin/base/BaseSkinActivity.java b/changeskin/src/main/java/com/zhy/changeskin/base/BaseSkinActivity.java
index beffbd2..8e47e1d 100644
--- a/changeskin/src/main/java/com/zhy/changeskin/base/BaseSkinActivity.java
+++ b/changeskin/src/main/java/com/zhy/changeskin/base/BaseSkinActivity.java
@@ -1,28 +1,13 @@
package com.zhy.changeskin.base;
import android.content.Context;
-import android.os.Build;
import android.os.Bundle;
-import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
-import android.support.v4.app.FragmentActivity;
import android.support.v4.util.ArrayMap;
import android.support.v4.view.LayoutInflaterCompat;
import android.support.v4.view.LayoutInflaterFactory;
-import android.support.v4.view.ViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.app.AppCompatDelegate;
-import android.support.v7.internal.app.AppCompatViewInflater;
-import android.support.v7.widget.AppCompatAutoCompleteTextView;
-import android.support.v7.widget.AppCompatButton;
-import android.support.v7.widget.AppCompatCheckBox;
-import android.support.v7.widget.AppCompatCheckedTextView;
-import android.support.v7.widget.AppCompatEditText;
-import android.support.v7.widget.AppCompatMultiAutoCompleteTextView;
-import android.support.v7.widget.AppCompatRadioButton;
-import android.support.v7.widget.AppCompatRatingBar;
-import android.support.v7.widget.AppCompatSpinner;
-import android.support.v7.widget.AppCompatTextView;
import android.util.AttributeSet;
import android.view.InflateException;
import android.view.LayoutInflater;
@@ -33,12 +18,10 @@
import com.zhy.changeskin.attr.SkinAttrSupport;
import com.zhy.changeskin.attr.SkinView;
import com.zhy.changeskin.callback.ISkinChangedListener;
-import com.zhy.changeskin.utils.L;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
-import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@@ -123,13 +106,7 @@ private void injectSkin(View view, List skinAttrList)
//do some skin inject
if (skinAttrList.size() != 0)
{
- List skinViews = SkinManager.getInstance().getSkinViews(this);
- if (skinViews == null)
- {
- skinViews = new ArrayList();
- }
- SkinManager.getInstance().addSkinView(this, skinViews);
- skinViews.add(new SkinView(view, skinAttrList));
+ SkinManager.getInstance().addSkinView(this, new SkinView(view, skinAttrList));
if (SkinManager.getInstance().needChangeSkin())
{