Android:计算字符串和drawables

时间:2016-09-15 12:41:32

标签: android drawable

我将一些可绘制的图像(fx。我有一些名为image_1,image_2等的图像)作为片段中的标题图像传播。当我硬编码可用的图像数量时,图像会随机加载,并生成从0到此数字的随机索引。

mHeaderBackgroundImagesCount是决赛:

private int getHeaderBackground() {
    // Random index between 0 and mHeaderBackgroundImagesCount
    Random rand = new Random();
    int index = rand.nextInt(mHeaderBackgroundImagesCount) + 1;

    return getResources()
            .getIdentifier("image_" + index, "drawable", getPackageName());
}

由于硬编码通常不是正确编程的方法,因此我想动态地找出有多少' image_X'我有的drawables并将其设置为mHeaderBackgroundImagesCount

我想对strings.xml资源文件中的字符串执行相同的操作,因为我还会在每个页面加载时传播一些字符串。

解决方案更新

此更新受以下 Lalit Poptani 建议的启发。它包括语法更正和优化,并已经过测试,可以使用。

private int countResources(String prefix, String type) {
    long id = -1;
    int count = -1;
    while (id != 0) {
        count++;
        id = getResources().getIdentifier(prefix + (count + 1),
                type, getPackageName());
    }

    return count;
}

System.out.println("Drawables counted: " + countResources("image_", "drawable"));
System.out.println("Strings counted: " + countResources("strTitle_", "string"));

注意:此方法假定计算的资源从索引1开始,并且没有像image_1 image_2 <hole> image_4等索引孔,因为它将首先终止id = 0的场合因此导致计数错误。

2 个答案:

答案 0 :(得分:1)

我不确定是否可以动态获取资源或绘图数量。

解决此问题的一种方法是使用字符串数组作为strings.xml中的资源。

e.g。

<resources>
<string-array name="foo_array"> 
    <item>abc1</item> 
    <item>abc2</item> 
    <item>abc3</item> 
</string-array> 

int count = getResources().getStringArray(R.array.foo_array).length;

答案 1 :(得分:1)

如果您确定您的drawable列表将按照image_1,image_2,...等顺序排列,那么您可以应用以下逻辑,

        int count = 0;
        int RANDOM_COUNT = 10; //which is more than your drawable count 
        for (int i = 1; i < RANDOM_COUNT; i++){
            int id = getResources().getIdentifier("ic_launcher_"+i, 
                                                    "drawable", getPackageName());
            if(id != 0){
                count = + count;
            }
            else{
                break;
            }
        }
        Log.e(TAG, "This is your final count of drawable with image_x - "+ count);

你使用这个逻辑是因为没有任何名称可绘制为image_x然后id将为0并且你可以打破循环