Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我需要在Switch语句中使用十六进制作为大小写_Android_Arrays_Random - Fatal编程技术网

Android 我需要在Switch语句中使用十六进制作为大小写

Android 我需要在Switch语句中使用十六进制作为大小写,android,arrays,random,Android,Arrays,Random,基本上,我有两个用XML定义的颜色整数数组。 第一个数组设置为“随机” int[] materialColors = getResources().getIntArray(R.array.materialColors); int randomMaterialColor = materialColors[new Random().nextInt(materialColors.length)]; 我希望应用程序的状态栏相应地更改为随机选择的颜色的较深阴影 我用过这个开关箱 switch (rand

基本上,我有两个用XML定义的颜色整数数组。 第一个数组设置为“随机”

int[] materialColors = getResources().getIntArray(R.array.materialColors);
int randomMaterialColor = materialColors[new Random().nextInt(materialColors.length)];
我希望应用程序的状态栏相应地更改为随机选择的颜色的较深阴影

我用过这个开关箱

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);
    }
应用程序可以运行,但状态栏颜色无法更改。 我无法在开关案例中使用十六进制值。randomMaterialColors是一个具有该值的整数,但我找不到解决方法

我如何解决这个问题

编辑[更新]

这是XML文件。colors.xml,其中每种颜色的颜色值以六边形表示。这些来自谷歌的材料指南

<?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>    

#F44336
#E91E63
#9C27B0
#673AB7
#3F51B5
#2196F3
#03A9F4
#00BCD4
#009688
#4CAF50
#8BC34A
#CDDC39
#FFEB3B
#FF9800
#FF5722
#795548
#9E9E9E
#607D8B
@颜色/红色
@颜色/粉红色
@颜色/紫色
@颜色/深紫色
@颜色/靛蓝
@颜色/蓝色
@颜色/浅蓝色
@颜色/青色
@颜色/青色
@颜色/绿色
@颜色/浅绿色
@颜色/石灰
@颜色/黄色
@颜色/琥珀色
@颜色/深橙色
@颜色/棕色
@颜色/灰色
@颜色/蓝/灰

根据文档,除了设置颜色之外,您还需要设置一些标志。试试下面的代码

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整数值,您可以将该整数值与R.color.red进行比较,后者具有整数值,例如21453698789,这将永远无法满足该情况

为此,你可以做一件事。因为您已经在XML中定义了颜色列表,并且您知道值在该数组中的确切位置。您可以按如下方式修改开关箱

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.

它返回整数值

您可以尝试其他选项。制作一个额外的字符串数组,包含所有颜色名称,如红色、粉色、紫色等。然后从数组中获得一个随机颜色名称,如下所示:

String[] materialColorNames = getResources().getStringArray(R.array.materialColorNames);
String randomMaterialColorName = materialColors[new Random().nextInt(
    materialColorNames.length)];
现在,由于您的状态栏颜色以“s”结尾,您可以简单地执行此操作,而不是整个开关盒:

int randomStatusBarColorId = getResources().getIdentifier(
    randomMaterialColorName + "s", "color", getPackageName());
windows.setStatusBarColor(getResources().getColor(randomStatusBarColorId));

为什么不存储生成的随机索引并打开它呢?数组是用XML声明的。不是Java。我还能这样做吗?您在这个数组int[]MaterialColor中以xml格式存储了什么?你能给我们看看吗。看看,完成了。应用程序可以运行,但状态栏仍为黑色。这可以正常工作。但是现在,我无法看到我使用randomMaterialColors更改的相对布局背景的变化。此时将调用onClick方法。onCreate工作正常。当调用setStatusBarColor()时,还可以全局保存颜色。在onClick()方法中,将相对布局颜色设置为该颜色。我已经将Int传递到案例中。我应该在哪里执行此操作?在开关值和案例值显示之前,我的数组中有十六进制值,这些值由材料设计指南提供。如果我使用一个字符串数组,这些值不会被设置为它们的正常颜色吗?呃,我的意思是独立于十六进制的颜色。制作一个额外的数组。