首页 > 解决方案 > 根据名称显示图像 (Kotlin)

问题描述

我正在寻找一种按名称显示可绘制文件夹中的图像的方法。解释:我有一个 Back4App 解析数据库。图像由它们在字符串类型列中的名称引用。例如:在我的数据库中,我将有如下引用的成员 姓 名 最喜欢的运动(这些是他练习的运动的象形图) 我的应用程序的可绘制文件夹中的图像 照片(名称 = JamesPhoto) 照片在我的应用程序的可绘制文件夹 如何通过指示其名称在图像视图中显示我的图像?目前我按其 ID 显示照片。看下面的代码

      <?xml version="1.0" encoding="utf-8"?>
      <androidx.cardview.widget.CardView
      xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="wrap_content">

    <LinearLayout
    android:padding="16dp"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

       <LinearLayout
           android:id="@+id/pictos"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content">

           <ImageView
               android:id="@+id/picto1"
               android:layout_alignParentRight="true"
               android:layout_width="30dp"
               android:layout_height="30dp"
               android:src="@drawable/pt_temple"/>
           <Space
               android:layout_width="5dp"
               android:layout_height="wrap_content"/>

           <ImageView
               android:id="@+id/picto2"
               android:layout_alignParentRight="true"
               android:layout_width="30dp"
               android:layout_height="30dp"
               android:src="@drawable/pt_surf"/>
           <Space
               android:layout_width="5dp"
               android:layout_height="wrap_content"/>

           <ImageView
               android:id="@+id/picto3"
               android:layout_alignParentRight="true"
               android:layout_width="30dp"
               android:layout_height="30dp"
               android:src="@drawable/pt_tradition"/>
           <Space
               android:layout_width="5dp"
               android:layout_height="wrap_content"/>

           <ImageView
               android:id="@+id/picto4"
               android:layout_alignParentRight="true"
               android:layout_width="30dp"
               android:layout_height="30dp"
               android:src="@drawable/pt_art"/>
           <Space
               android:layout_width="5dp"
               android:layout_height="wrap_content"/>

           <ImageView
               android:id="@+id/picto5"
               android:layout_alignParentRight="true"
               android:layout_width="30dp"
               android:layout_height="30dp"
               android:src="@drawable/pt_kite"/>

       </LinearLayout>

        <TextView
            android:id="@+id/name"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_below="@+id/pictos"
            android:layout_alignParentLeft="true"
            android:layout_marginLeft="-2dp"
            android:layout_marginTop="6dp"
            android:layout_marginRight="2dp"
            android:layout_toLeftOf="@+id/imageLieu"
            android:text="Nom lieu"
            android:textAppearance="?android:attr/textAppearanceLarge" />

        <ImageView
            android:id="@+id/memberPhoto"
            android:layout_alignParentRight="true"
            android:layout_width="80pt"
            android:layout_height="43pt"
            android:src="@drawable/james"/>
        </RelativeLayout>

        <TextView
        android:id="@+id/Location"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:lines="4"
        android:text="@string/text_generic"
        android:textColor="#050000" />

        <LinearLayout
        android:layout_marginTop="16dp"
        android:orientation="horizontal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <Button
            android:id="@+id/favorisNoir"
            android:layout_width="35dp"
            android:layout_height="35dp"
            android:width="35dp"
            android:height="35dp"
            android:background="@drawable/favoris_noir" />

        <Space
            android:layout_width="20dp"
            android:layout_height="wrap_content"/>

        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:gravity="center">


            <Button
                android:id="@+id/like"
                android:layout_width="35dp"
                android:layout_height="35dp"
                android:background="@drawable/like" />

            <Space
                android:layout_width="5dp"
                android:layout_height="wrap_content"/>

            <TextView
                android:id="@+id/countLike"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@+id/like"
                android:focusable="false"
                android:gravity="center_horizontal"
                android:text="100"
                android:textSize="10dp" />
        </LinearLayout>
        </LinearLayout>


    </LinearLayout>
    </androidx.cardview.widget.CardView>

标签: androidimagekotlinparse-platform

解决方案


您可以使用getIdentifier. 使用以下代码段按名称从资源中获取可绘制对象

  1. pic1是您的可绘制图像名称
  2. drawable是资源文件夹
  3. android.demo是你的包名(或者你可以用来activity.getPackageName()动态获取包)

科特林

val identifier = resources.getIdentifier("pic1", "drawable", "android.demo")
imageView1.setImageResource(identifier)

爪哇

int identifier = getResources().getIdentifier("pic1", "drawable","android.demo");
ImageView image = (ImageView) findViewById(R.id.imageView1);
image.setImageResource(identifier);

或者您可以使用反射来获取资源

try {
    Class res = R.drawable.class;
    Field field = res.getField("pic1");
    int drawableId = field.getInt(null);
    image.setImageResource(identifier);
}
catch (Exception e) {
    Log.e("MyTag", "Failure to get drawable id.", e);
}

推荐阅读