我需要在 Switch 语句中使用十六进制作为 Cases
I need to use Hexadecimal as the Cases in my Switch statement
所以,基本上我在 XML 中定义了两个颜色整数数组。
第一个数组设置为随机。
int[] materialColors = getResources().getIntArray(R.array.materialColors);
int randomMaterialColor = materialColors[new Random().nextInt(materialColors.length)];
我希望应用程序的状态栏相应地更改为随机选择的深色阴影。
我为此使用了 Switch case。
switch (randomMaterialColor){
case R.color.red:
window.setStatusBarColor(getResources().getColor(R.color.reds));
break;
case R.color.pink:
window.setStatusBarColor(getResources().getColor(R.color.pinks));
break;
case R.color.purple:
window.setStatusBarColor(getResources().getColor(R.color.purples));
break;
case R.color.deep_purple:
window.setStatusBarColor(getResources().getColor(R.color.deep_purple));
break;
case R.color.indigo:
window.setStatusBarColor(getResources().getColor(R.color.indigos));
break;
case R.color.blue:
window.setStatusBarColor(getResources().getColor(R.color.blues));
break;
case R.color.light_blue:
window.setStatusBarColor(getResources().getColor(R.color.light_blues));
break;
case R.color.cyan:
window.setStatusBarColor(getResources().getColor(R.color.cyans));
break;
case R.color.teal:
window.setStatusBarColor(getResources().getColor(R.color.teal));
break;
case R.color.green:
window.setStatusBarColor(getResources().getColor(R.color.greens));
break;
case R.color.light_green:
window.setStatusBarColor(getResources().getColor(R.color.light_greens));
break;
case R.color.lime:
window.setStatusBarColor(getResources().getColor(R.color.limes));
break;
case R.color.yellow:
window.setStatusBarColor(getResources().getColor(R.color.yellows));
break;
case R.color.amber:
window.setStatusBarColor(getResources().getColor(R.color.ambers));
break;
case R.color.deep_orange:
window.setStatusBarColor(getResources().getColor(R.color.deep_oranges));
break;
case R.color.brown:
window.setStatusBarColor(getResources().getColor(R.color.browns));
break;
case R.color.gray:
window.setStatusBarColor(getResources().getColor(R.color.grays));
break;
case R.color.blue_gray:
window.setStatusBarColor(getResources().getColor(R.color.blue_grays));
break;
default:
Toast.makeText(this, "Could not detect color!", Toast.LENGTH_SHORT);
}
应用程序能够运行,但状态栏颜色无法更改。
我无法在 Switch 案例中使用十六进制值。 randomMaterialColors 是一个具有该值的 Integer,但我找不到解决方法。
我该如何解决这个问题?
编辑[更新]
这是 XML 文件。 colors.xml 具有 Hexa 中每种颜色的颜色值。这些来自 Google 的 Material 指南。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#F44336</color>
<color name="pink">#E91E63</color>
<color name="purple">#9C27B0</color>
<color name="deep_purple">#673AB7</color>
<color name="indigo">#3F51B5</color>
<color name="blue">#2196F3</color>
<color name="light_blue">#03A9F4</color>
<color name="cyan">#00BCD4</color>
<color name="teal">#009688</color>
<color name="green">#4CAF50</color>
<color name="light_green">#8BC34A</color>
<color name="lime">#CDDC39</color>
<color name="yellow">#FFEB3B</color>
<color name="amber">#FF9800</color>
<color name="deep_orange">#FF5722</color>
<color name="brown">#795548</color>
<color name="gray">#9E9E9E</color>
<color name="blue_gray">#607D8B</color>
<string-array name="materialColors">
<item>@color/red</item>
<item>@color/pink</item>
<item>@color/purple</item>
<item>@color/deep_purple</item>
<item>@color/indigo</item>
<item>@color/blue</item>
<item>@color/light_blue</item>
<item>@color/cyan</item>
<item>@color/teal</item>
<item>@color/green</item>
<item>@color/light_green</item>
<item>@color/lime</item>
<item>@color/yellow</item>
<item>@color/amber</item>
<item>@color/deep_orange</item>
<item>@color/brown</item>
<item>@color/gray</item>
<item>@color/blue_gray</item>
</string-array>
</resources>
根据文档,除了设置颜色之外,您还需要设置一些标志。试试下面的代码。
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));
设置那些标志。这应该有效。
[编辑]更新
问题来了。数字 grandomMaterialColor 是 integer 值,并且您将该整数值与 R.color.red 进行比较具有 整数 值,例如 21453698789,这将 永远不会满足 这种情况。
为此,您可以做一件事。由于您已经在 XML 中定义了颜色列表,并且您知道该值在该数组中的确切位置。您可以按如下方式修改switch case。
int[] materialColors = getResources().getIntArray(R.array.rainbow);
Random ranom=new Random();
int randomMaterialColor=ranom.nextInt(materialColors.length-1);
switch (randomMaterialColor){
case 0:
window.setStatusBarColor(getResources().getColor(R.color.reds));
break;
case 1:
window.setStatusBarColor(getResources().getColor(R.color.pinks));
break;
case 2:
window.setStatusBarColor(getResources().getColor(R.color.purples));
break;
case 3:
window.setStatusBarColor(getResources().getColor(R.color.deep_purple));
break;
case 4:
window.setStatusBarColor(getResources().getColor(R.color.indigos));
break;
case 5:
window.setStatusBarColor(getResources().getColor(R.color.blues));
break;
case 6:
window.setStatusBarColor(getResources().getColor(R.color.light_blues));
break;
case 7:
window.setStatusBarColor(getResources().getColor(R.color.cyans));
break;
case 8:
window.setStatusBarColor(getResources().getColor(R.color.teal));
break;
case 9:
window.setStatusBarColor(getResources().getColor(R.color.greens));
break;
case 10:
window.setStatusBarColor(getResources().getColor(R.color.light_greens));
break;
case 11:
window.setStatusBarColor(getResources().getColor(R.color.limes));
break;
case 12:
window.setStatusBarColor(getResources().getColor(R.color.yellows));
break;
case 13:
window.setStatusBarColor(getResources().getColor(R.color.ambers));
break;
case 14:
window.setStatusBarColor(getResources().getColor(R.color.deep_oranges));
break;
case 15:
window.setStatusBarColor(getResources().getColor(R.color.browns));
break;
case 16:
window.setStatusBarColor(getResources().getColor(R.color.grays));
break;
case 17:
window.setStatusBarColor(getResources().getColor(R.color.blue_grays));
break;
default:
Toast.makeText(this, "Could not detect color!", Toast.LENGTH_SHORT);
}
像
一样解析颜色值
Color.parseColor(myColor);//myColor in hexadecimal.
它是returns整数值。
您可以尝试其他选项。创建一个包含所有颜色名称的附加字符串数组,如红色、粉色、紫色等。然后你从数组中得到一个随机颜色名称,如下所示:
String[] materialColorNames = getResources().getStringArray(R.array.materialColorNames);
String randomMaterialColorName = materialColors[new Random().nextInt(
materialColorNames.length)];
现在,由于您的状态栏颜色以 's' 结尾,您可以简单地执行此操作而不是整个 switch-case:
int randomStatusBarColorId = getResources().getIdentifier(
randomMaterialColorName + "s", "color", getPackageName());
windows.setStatusBarColor(getResources().getColor(randomStatusBarColorId));
所以,基本上我在 XML 中定义了两个颜色整数数组。 第一个数组设置为随机。
int[] materialColors = getResources().getIntArray(R.array.materialColors);
int randomMaterialColor = materialColors[new Random().nextInt(materialColors.length)];
我希望应用程序的状态栏相应地更改为随机选择的深色阴影。
我为此使用了 Switch case。
switch (randomMaterialColor){
case R.color.red:
window.setStatusBarColor(getResources().getColor(R.color.reds));
break;
case R.color.pink:
window.setStatusBarColor(getResources().getColor(R.color.pinks));
break;
case R.color.purple:
window.setStatusBarColor(getResources().getColor(R.color.purples));
break;
case R.color.deep_purple:
window.setStatusBarColor(getResources().getColor(R.color.deep_purple));
break;
case R.color.indigo:
window.setStatusBarColor(getResources().getColor(R.color.indigos));
break;
case R.color.blue:
window.setStatusBarColor(getResources().getColor(R.color.blues));
break;
case R.color.light_blue:
window.setStatusBarColor(getResources().getColor(R.color.light_blues));
break;
case R.color.cyan:
window.setStatusBarColor(getResources().getColor(R.color.cyans));
break;
case R.color.teal:
window.setStatusBarColor(getResources().getColor(R.color.teal));
break;
case R.color.green:
window.setStatusBarColor(getResources().getColor(R.color.greens));
break;
case R.color.light_green:
window.setStatusBarColor(getResources().getColor(R.color.light_greens));
break;
case R.color.lime:
window.setStatusBarColor(getResources().getColor(R.color.limes));
break;
case R.color.yellow:
window.setStatusBarColor(getResources().getColor(R.color.yellows));
break;
case R.color.amber:
window.setStatusBarColor(getResources().getColor(R.color.ambers));
break;
case R.color.deep_orange:
window.setStatusBarColor(getResources().getColor(R.color.deep_oranges));
break;
case R.color.brown:
window.setStatusBarColor(getResources().getColor(R.color.browns));
break;
case R.color.gray:
window.setStatusBarColor(getResources().getColor(R.color.grays));
break;
case R.color.blue_gray:
window.setStatusBarColor(getResources().getColor(R.color.blue_grays));
break;
default:
Toast.makeText(this, "Could not detect color!", Toast.LENGTH_SHORT);
}
应用程序能够运行,但状态栏颜色无法更改。 我无法在 Switch 案例中使用十六进制值。 randomMaterialColors 是一个具有该值的 Integer,但我找不到解决方法。
我该如何解决这个问题?
编辑[更新]
这是 XML 文件。 colors.xml 具有 Hexa 中每种颜色的颜色值。这些来自 Google 的 Material 指南。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#F44336</color>
<color name="pink">#E91E63</color>
<color name="purple">#9C27B0</color>
<color name="deep_purple">#673AB7</color>
<color name="indigo">#3F51B5</color>
<color name="blue">#2196F3</color>
<color name="light_blue">#03A9F4</color>
<color name="cyan">#00BCD4</color>
<color name="teal">#009688</color>
<color name="green">#4CAF50</color>
<color name="light_green">#8BC34A</color>
<color name="lime">#CDDC39</color>
<color name="yellow">#FFEB3B</color>
<color name="amber">#FF9800</color>
<color name="deep_orange">#FF5722</color>
<color name="brown">#795548</color>
<color name="gray">#9E9E9E</color>
<color name="blue_gray">#607D8B</color>
<string-array name="materialColors">
<item>@color/red</item>
<item>@color/pink</item>
<item>@color/purple</item>
<item>@color/deep_purple</item>
<item>@color/indigo</item>
<item>@color/blue</item>
<item>@color/light_blue</item>
<item>@color/cyan</item>
<item>@color/teal</item>
<item>@color/green</item>
<item>@color/light_green</item>
<item>@color/lime</item>
<item>@color/yellow</item>
<item>@color/amber</item>
<item>@color/deep_orange</item>
<item>@color/brown</item>
<item>@color/gray</item>
<item>@color/blue_gray</item>
</string-array>
</resources>
根据文档,除了设置颜色之外,您还需要设置一些标志。试试下面的代码。
Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));
设置那些标志。这应该有效。
[编辑]更新
问题来了。数字 grandomMaterialColor 是 integer 值,并且您将该整数值与 R.color.red 进行比较具有 整数 值,例如 21453698789,这将 永远不会满足 这种情况。
为此,您可以做一件事。由于您已经在 XML 中定义了颜色列表,并且您知道该值在该数组中的确切位置。您可以按如下方式修改switch case。
int[] materialColors = getResources().getIntArray(R.array.rainbow);
Random ranom=new Random();
int randomMaterialColor=ranom.nextInt(materialColors.length-1);
switch (randomMaterialColor){
case 0:
window.setStatusBarColor(getResources().getColor(R.color.reds));
break;
case 1:
window.setStatusBarColor(getResources().getColor(R.color.pinks));
break;
case 2:
window.setStatusBarColor(getResources().getColor(R.color.purples));
break;
case 3:
window.setStatusBarColor(getResources().getColor(R.color.deep_purple));
break;
case 4:
window.setStatusBarColor(getResources().getColor(R.color.indigos));
break;
case 5:
window.setStatusBarColor(getResources().getColor(R.color.blues));
break;
case 6:
window.setStatusBarColor(getResources().getColor(R.color.light_blues));
break;
case 7:
window.setStatusBarColor(getResources().getColor(R.color.cyans));
break;
case 8:
window.setStatusBarColor(getResources().getColor(R.color.teal));
break;
case 9:
window.setStatusBarColor(getResources().getColor(R.color.greens));
break;
case 10:
window.setStatusBarColor(getResources().getColor(R.color.light_greens));
break;
case 11:
window.setStatusBarColor(getResources().getColor(R.color.limes));
break;
case 12:
window.setStatusBarColor(getResources().getColor(R.color.yellows));
break;
case 13:
window.setStatusBarColor(getResources().getColor(R.color.ambers));
break;
case 14:
window.setStatusBarColor(getResources().getColor(R.color.deep_oranges));
break;
case 15:
window.setStatusBarColor(getResources().getColor(R.color.browns));
break;
case 16:
window.setStatusBarColor(getResources().getColor(R.color.grays));
break;
case 17:
window.setStatusBarColor(getResources().getColor(R.color.blue_grays));
break;
default:
Toast.makeText(this, "Could not detect color!", Toast.LENGTH_SHORT);
}
像
一样解析颜色值Color.parseColor(myColor);//myColor in hexadecimal.
它是returns整数值。
您可以尝试其他选项。创建一个包含所有颜色名称的附加字符串数组,如红色、粉色、紫色等。然后你从数组中得到一个随机颜色名称,如下所示:
String[] materialColorNames = getResources().getStringArray(R.array.materialColorNames);
String randomMaterialColorName = materialColors[new Random().nextInt(
materialColorNames.length)];
现在,由于您的状态栏颜色以 's' 结尾,您可以简单地执行此操作而不是整个 switch-case:
int randomStatusBarColorId = getResources().getIdentifier(
randomMaterialColorName + "s", "color", getPackageName());
windows.setStatusBarColor(getResources().getColor(randomStatusBarColorId));