android - 根据名称显示图像 (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>
解决方案
您可以使用getIdentifier
. 使用以下代码段按名称从资源中获取可绘制对象
pic1
是您的可绘制图像名称drawable
是资源文件夹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);
}
推荐阅读
- laravel - Laravel Eloquent 是否支持回调?
- c# - c#解方程到未知参数
- python - Python - 如何将列映射到字母序列?
- appium - Appium中的Press和Tap触摸动作之间的区别?
- node.js - Node.js 如何知道在 views 文件夹中渲染 ejs
- c# - Dialogflow - 检测意图冻结 - C#
- postgresql - 如何从不同的数据库恢复模式和仅数据备份
- mysql - mysql查询以选择行数据作为具有条件的列数据
- c# - 在 Windows 10 中通过编程访问和操作文件属性
- java - 在 MAC OS 中将 JAR 文件作为后台服务运行