【问题标题】:Iterating over drawables in Android在 Android 中迭代可绘制对象
【发布时间】:2018-08-13 14:19:26
【问题描述】:

在 Android 中,我只找到了关于如何从 MainActivity.java 打开单个特定 Drawable 的答案,但没有找到如何从 res/drawables 迭代每个 Drawable 的答案。 Drawables 的名称不遵循任何模式(例如,从 0 到 25 编号),因此建议的答案 here 遗憾地没有解决我的问题。有谁知道如何做后者?

提前谢谢你:)

【问题讨论】:

标签: java android android-drawable


【解决方案1】:

首先,将你的drawables放入一个数组中

<array name="dashboard_item_menu_drawable">
    <item>@drawable/ic_file_green</item>
    <item>@drawable/ic_email_green</item>
    <item>@drawable/ic_linear_scale_green</item>
    <item>@drawable/ic_undo_green</item>
    <item>@drawable/ic_check_circle_green</item>
    <item>@drawable/ic_archive_green</item>
</array>

然后,迭代您的数组可绘制对象

val icons = ArrayList<Int>()
val arr = resources.obtainTypedArray(R.array.dashboard_item_menu_drawable)
(0 until arr.length()).forEach {
    // get resource id of each drawable
    val icon = arr.getResourceId(it, -1)
    icons.add(icon)
}

接下来,回收资源

arr.recycle()

然后你就可以使用你的drawable了

iconView.setImageDrawable(ContextCompat.getDrawable(this, icons[index]))

【讨论】:

    【解决方案2】:

    如果您想遍历具有相似名称的可绘制对象,例如:image1、image2、...、image10,您可以这样做:

        for (int i = 0; i < 10; i++) {
            int id = getResources().getIdentifier("image" + i, "drawable", getPackageName());
            Drawable d = ContextCompat.getDrawable(this, id);
            // your code here
        }
    

    【讨论】:

      【解决方案3】:

      最简单的方法是将可绘制对象的名称放入字符串数组中:

      String[] symbols = {"first_img", "second_img", "third_img", "fourth_img"};
      

      然后像这样遍历它们(我将图像放入 GridLayout):

      for(String symbol : symbols) {
          int id = getResources().getIdentifier(symbol, "drawable", getPackageName());
      
          ImageView img = new ImageView(this);
          LinearLayout.LayoutParams imgParams = new LinearLayout.LayoutParams(300, 300);
          imgParams.setMargins(30, 30, 30, 30);
          img.setLayoutParams(imgParams);
          img.setBackgroundResource(id);
          symbolGrid.addView(img);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-06-03
        • 2012-05-22
        • 1970-01-01
        相关资源
        最近更新 更多