diff --git a/aes/build.properties b/aes/build.properties index 3900167..5d56576 100644 --- a/aes/build.properties +++ b/aes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue May 12 09:45:14 CST 2026 +#Tue May 12 10:47:54 CST 2026 stageCount=3 libraryProject=libaes baseVersion=15.20 publishVersion=15.20.2 -buildCount=5 +buildCount=14 baseBetaVersion=15.20.3 diff --git a/libaes/build.properties b/libaes/build.properties index 3900167..5d56576 100644 --- a/libaes/build.properties +++ b/libaes/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Tue May 12 09:45:14 CST 2026 +#Tue May 12 10:47:54 CST 2026 stageCount=3 libraryProject=libaes baseVersion=15.20 publishVersion=15.20.2 -buildCount=5 +buildCount=14 baseBetaVersion=15.20.3 diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java b/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java index 97610a3..24635f5 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/activitys/DrawerFragmentActivity.java @@ -31,6 +31,7 @@ import cc.winboll.studio.libaes.utils.DevelopUtils; import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; import cc.winboll.studio.libaes.views.ADrawerMenuListView; import cc.winboll.studio.libaes.views.ADsBannerView; +import cc.winboll.studio.libaes.views.ASupportToolbar; import cc.winboll.studio.libappbase.GlobalApplication; import cc.winboll.studio.libappbase.LogUtils; import com.baoyz.widget.PullRefreshLayout; @@ -174,6 +175,9 @@ public abstract class DrawerFragmentActivity extends AppCompatActivity implement @Override public boolean onOptionsItemSelected(MenuItem item) { if (AESThemeUtil.onAppThemeItemSelected(this, item)) { + if (mToolbar instanceof ASupportToolbar) { + ((ASupportToolbar) mToolbar).refreshFromTheme(); + } recreate(); } if (DevelopUtils.onDevelopItemSelected(this, item)) { LogUtils.d(TAG, String.format("onOptionsItemSelected item.getItemId() %d ", item.getItemId())); diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestASupportToolbarActivity.java b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestASupportToolbarActivity.java index 6fa37b6..d014654 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestASupportToolbarActivity.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/unittests/TestASupportToolbarActivity.java @@ -12,6 +12,8 @@ import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libaes.R; import cc.winboll.studio.libaes.interfaces.IWinBoLLActivity; import cc.winboll.studio.libaes.utils.AESThemeUtil; +import cc.winboll.studio.libaes.views.ASupportToolbar; +import cc.winboll.studio.libappbase.LogUtils; public class TestASupportToolbarActivity extends AppCompatActivity implements IWinBoLLActivity { @@ -29,14 +31,17 @@ public class TestASupportToolbarActivity extends AppCompatActivity implements IW @Override protected void onCreate(Bundle savedInstanceState) { + LogUtils.d(TAG, "onCreate() start"); AESThemeUtil.applyAppTheme(this); super.onCreate(savedInstanceState); setContentView(R.layout.activity_testasupporttoolbar); + LogUtils.d(TAG, "setContentView() done"); Toolbar toolbar = findViewById(R.id.activitytestasupporttoolbarASupportToolbar1); + LogUtils.d(TAG, "findViewById() done, toolbar=" + toolbar.getClass().getSimpleName()); setSupportActionBar(toolbar); + LogUtils.d(TAG, "setSupportActionBar() done"); getSupportActionBar().setTitle(TAG); - + LogUtils.d(TAG, "setTitle() done"); + LogUtils.d(TAG, "onCreate() end"); } - - } diff --git a/libaes/src/main/java/cc/winboll/studio/libaes/views/ASupportToolbar.java b/libaes/src/main/java/cc/winboll/studio/libaes/views/ASupportToolbar.java index c384919..594349d 100644 --- a/libaes/src/main/java/cc/winboll/studio/libaes/views/ASupportToolbar.java +++ b/libaes/src/main/java/cc/winboll/studio/libaes/views/ASupportToolbar.java @@ -7,15 +7,12 @@ package cc.winboll.studio.libaes.views; */ import android.content.Context; import android.content.res.TypedArray; -import android.graphics.Color; import android.graphics.drawable.GradientDrawable; import android.graphics.drawable.LayerDrawable; import android.util.AttributeSet; import androidx.appcompat.widget.Toolbar; import cc.winboll.studio.libaes.R; -import android.graphics.drawable.Drawable; -import androidx.core.content.ContextCompat; -import android.graphics.PorterDuff; +import cc.winboll.studio.libappbase.LogUtils; public class ASupportToolbar extends Toolbar { @@ -25,65 +22,120 @@ public class ASupportToolbar extends Toolbar { int mStartColor; int mCenterColor; int mEndColor; - LayerDrawable ld; GradientDrawable[] array = new GradientDrawable[3]; - //private GradientDrawable gradientDrawable; + LayerDrawable ld; public ASupportToolbar(Context context) { super(context); + LogUtils.d(TAG, "ASupportToolbar() constructor"); } public ASupportToolbar(Context context, AttributeSet attrs) { super(context, attrs); - TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ASupportToolbar, R.attr.aSupportToolbar, 0); - mTitleTextColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarTitleTextColor, Color.GREEN); - mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, Color.BLUE); - mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, Color.RED); - mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, Color.YELLOW); - // 返回一个绑定资源结束的信号给资源 - a.recycle(); - notifyColorChange(); + LogUtils.d(TAG, "ASupportToolbar() attrs constructor"); + initStyledAttributes(attrs, R.attr.aSupportToolbar); } + public ASupportToolbar(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + LogUtils.d(TAG, "ASupportToolbar() attrs defStyleAttr constructor"); + initStyledAttributes(attrs, defStyleAttr); + } + + void initStyledAttributes(AttributeSet attrs, int defStyleAttr) { + LogUtils.d(TAG, "initStyledAttributes() start"); + TypedArray a = getContext().obtainStyledAttributes(attrs, R.styleable.ASupportToolbar, defStyleAttr, 0); + mTitleTextColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarTitleTextColor, 0xFF00FF00); + mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, 0xFF03AB4E); + mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, 0xFF03AB4E); + mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, 0xFF3DDC84); + LogUtils.d(TAG, String.format("initStyledAttributes() colors: title=0x%x, start=0x%x, center=0x%x, end=0x%x", mTitleTextColor, mStartColor, mCenterColor, mEndColor)); + a.recycle(); + setTitleTextColor(mTitleTextColor); + LogUtils.d(TAG, "initStyledAttributes() end"); + } + + @Override + protected void onAttachedToWindow() { + super.onAttachedToWindow(); + LogUtils.d(TAG, "onAttachedToWindow() start"); + refreshFromTheme(); + LogUtils.d(TAG, "onAttachedToWindow() end"); + } + + public void refreshFromTheme() { + LogUtils.d(TAG, "refreshFromTheme() start"); + TypedArray a = getContext().obtainStyledAttributes(R.styleable.ASupportToolbar); + try { + mTitleTextColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarTitleTextColor, 0xFF00FF00); + mStartColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarStartColor, 0xFF03AB4E); + mCenterColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarCenterColor, 0xFF03AB4E); + mEndColor = a.getColor(R.styleable.ASupportToolbar_attrASupportToolbarEndColor, 0xFF3DDC84); + LogUtils.d(TAG, String.format("refreshFromTheme() colors: title=0x%x, start=0x%x, center=0x%x, end=0x%x", mTitleTextColor, mStartColor, mCenterColor, mEndColor)); + } finally { + a.recycle(); + } + postNotifyColorChange(); + LogUtils.d(TAG, "refreshFromTheme() end"); + } + + void postNotifyColorChange() { + LogUtils.d(TAG, "postNotifyColorChange()"); + removeCallbacks(mRefreshRunnable); + post(mRefreshRunnable); + } + + Runnable mRefreshRunnable = new Runnable() { + @Override + public void run() { + LogUtils.d(TAG, "mRefreshRunnable.run() start"); + notifyColorChange(); + LogUtils.d(TAG, "mRefreshRunnable.run() end"); + } + }; + void notifyColorChange() { - // 工具栏描边 + LogUtils.d(TAG, "notifyColorChange() start"); + LogUtils.d(TAG, String.format("notifyColorChange() size: width=%d, height=%d", getWidth(), getHeight())); + + int nWidth = getWidth(); + int nHeight = getHeight(); + if (nWidth == 0 || nHeight == 0) { + LogUtils.d(TAG, "notifyColorChange() skipped: width or height is 0"); + return; + } + int nStroke = 5; - //分别为开始颜色,中间夜色,结束颜色 - int colors0[] = { mEndColor , mCenterColor, mStartColor}; - GradientDrawable gradientDrawable0; + int colors0[] = { mEndColor , mCenterColor, mStartColor }; array[2] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors0); - gradientDrawable0 = array[2]; - gradientDrawable0.setShape(GradientDrawable.RECTANGLE); - gradientDrawable0.setColors(colors0); //添加颜色组 - gradientDrawable0.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置线性渐变 - gradientDrawable0.setCornerRadius(20); + array[2].setShape(GradientDrawable.RECTANGLE); + array[2].setColors(colors0); + array[2].setGradientType(GradientDrawable.LINEAR_GRADIENT); + array[2].setCornerRadius(20); - int colors1[] = { mCenterColor , mCenterColor, mCenterColor }; - GradientDrawable gradientDrawable1; + int colors1[] = { mCenterColor, mCenterColor, mCenterColor }; array[1] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors1); - gradientDrawable1 = array[1]; - gradientDrawable1.setShape(GradientDrawable.RECTANGLE); - gradientDrawable1.setColors(colors1); //添加颜色组 - gradientDrawable1.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置线性渐变 - gradientDrawable1.setCornerRadius(20); + array[1].setShape(GradientDrawable.RECTANGLE); + array[1].setColors(colors1); + array[1].setGradientType(GradientDrawable.LINEAR_GRADIENT); + array[1].setCornerRadius(20); - int colors2[] = { mEndColor, mCenterColor, mStartColor }; - GradientDrawable gradientDrawable2; + int colors2[] = { mEndColor, mCenterColor, mStartColor }; array[0] = new GradientDrawable(GradientDrawable.Orientation.TOP_BOTTOM, colors2); - gradientDrawable2 = array[0]; - gradientDrawable2.setShape(GradientDrawable.RECTANGLE); - gradientDrawable2.setColors(colors2); //添加颜色组 - gradientDrawable2.setGradientType(GradientDrawable.LINEAR_GRADIENT);//设置线性渐变 - gradientDrawable2.setCornerRadius(20); + array[0].setShape(GradientDrawable.RECTANGLE); + array[0].setColors(colors2); + array[0].setGradientType(GradientDrawable.LINEAR_GRADIENT); + array[0].setCornerRadius(20); - ld = new LayerDrawable(array); //参数为上面的Drawable数组 - ld.setLayerInset(2, nStroke * 2, nStroke * 2, getWidth() + nStroke * 2, getHeight() + nStroke * 2); - ld.setLayerInset(1, nStroke, nStroke, getWidth() + nStroke, getHeight() + nStroke); - ld.setLayerInset(0, 0, 0, getWidth(), getHeight()); + ld = new LayerDrawable(array); + ld.setLayerInset(2, nStroke * 2, nStroke * 2, nWidth + nStroke * 2, nHeight + nStroke * 2); + ld.setLayerInset(1, nStroke, nStroke, nWidth + nStroke, nHeight + nStroke); + ld.setLayerInset(0, 0, 0, nWidth, nHeight); setBackgroundDrawable(ld); setTitleTextColor(mTitleTextColor); setSubtitleTextColor(mTitleTextColor); + LogUtils.d(TAG, "notifyColorChange() end"); } -} +} \ No newline at end of file diff --git a/libaes/src/main/res/values/attrs.xml b/libaes/src/main/res/values/attrs.xml index e423414..b83c54a 100644 --- a/libaes/src/main/res/values/attrs.xml +++ b/libaes/src/main/res/values/attrs.xml @@ -43,6 +43,7 @@ +