溫馨提示×

android colorprimary怎樣實現動態變化

小樊
112
2024-12-01 11:08:09
欄目: 編程語言

在Android中,要使colorPrimary動態變化,可以通過編程方式更改主題屬性或者使用ColorStateList來實現。以下是兩種實現方法:

方法1:編程方式更改主題屬性

在代碼中,你可以通過以下步驟動態更改colorPrimary

  1. 獲取主題對象:
TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{android.R.attr.colorPrimary});
int colorPrimary = typedArray.getColor(0, 0);
typedArray.recycle();
  1. 更改colorPrimary值:
int newColorPrimary = getResources().getColor(R.color.new_color_primary);
  1. 應用新的colorPrimary值:
TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{android.R.attr.colorPrimary});
typedArray.setColor(0, newColorPrimary);
setTheme(getTheme()); // 應用新的主題
typedArray.recycle();

方法2:使用ColorStateList

  1. 創建一個ColorStateList對象,定義不同狀態的顏色:
ColorStateList colorStateList = new ColorStateList(
        new int[][]{
                new int[]{android.R.attr.state_enabled}, // 狀態為enabled時的顏色
                new int[]{-android.R.attr.state_enabled}  // 狀態為not enabled時的顏色
        },
        new int[]{
                ContextCompat.getColor(this, R.color.color_primary_enabled), // 狀態為enabled時的顏色值
                ContextCompat.getColor(this, R.color.color_primary_not_enabled) // 狀態為not enabled時的顏色值
        }
);
  1. 應用ColorStateListcolorPrimary
setTheme(new Theme().applyStyle(R.style.AppTheme, true));
TypedArray typedArray = getTheme().obtainStyledAttributes(new int[]{android.R.attr.colorPrimary});
typedArray.setColor(0, colorStateList.getDefaultColor());
setTheme(getTheme()); // 應用新的主題
typedArray.recycle();

這樣,colorPrimary就可以根據狀態動態變化了。注意,這些方法需要在主線程中執行。

0
亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女