「Update」

1、增加isUseSkin属性,来针对性的开启换肤,防止大面积误伤其它View。原因是很多数据、图片都是动态设置的。会把设置的数据冲掉;
This commit is contained in:
donghongyu
2024-10-25 17:47:31 +08:00
parent 2ccbe54756
commit cb397d919a
7 changed files with 43 additions and 18 deletions

View File

@@ -1,8 +1,8 @@
package com.mogo.skin;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.mogo.skin.utils.SkinThemeUtils;
@@ -30,6 +30,8 @@ public class SkinAttribute {
mAttributes.add("skinTypeface");
mAttributes.add("isUseSkin");
mAttributes.add("text");
mAttributes.add("hint");
}
@@ -48,14 +50,18 @@ public class SkinAttribute {
* 记录View中哪几个属性需要换肤,找到当前页面的所有属性
*/
public void load(View view, AttributeSet attrs) {
// 记录View是否配置了isUseSkin属性
boolean isUseSkin = false;
List<SkinPair> skinPairs = new ArrayList<>();
for (int i = 0; i < attrs.getAttributeCount(); i++) {
//获得属性名
String attributeName = attrs.getAttributeName(i);
// 筛选配置了换肤属性的View防止因为换肤导致。动态控制了状态的View被还原的问题
if (attributeName.equals("isUseSkin")) {
isUseSkin = true;
}
//是否符合 需要筛选的属性名
if (mAttributes.contains(attributeName)) {
else if (mAttributes.contains(attributeName)) {
//属性名写法
//#ffff
//?attr/xxx
@@ -95,11 +101,14 @@ public class SkinAttribute {
}
//将View与之对应的可以动态替换的属性集合 放入 集合中
if (!skinPairs.isEmpty() || view instanceof TextView || view instanceof SkinViewSupport) {
//选择皮肤 更新
SkinView skinView = new SkinView(view, skinPairs);
skinView.applySkin();
mSkinViews.add(skinView);
if (isUseSkin) {
Log.d(TAG, "View 开启了换肤……isUseSkin");
if (!skinPairs.isEmpty() || view instanceof SkinViewSupport) {
//选择皮肤 更新
SkinView skinView = new SkinView(view, skinPairs);
skinView.applySkin();
mSkinViews.add(skinView);
}
}
}