我正在做一个小型库来封装适配器功能,我需要以编程方式获取视图的名称。例如:
<ImageView
android:id="@+id/**ivPerson**"
android:layout_width="80dp"
android:layout_height="80dp"/>
现在,在代码中我有视图(ImageView),我需要获取视图的名称 - &gt; ivPerson。我可以通过view.getId()获取id,但这不是我需要的。
有可能吗?
我试过这个:
String name = context.getResources().getResourceEntryName(view.getId());
但不行。
答案 0 :(得分:7)
您可以将标记设为ID,即android:tag="ivPerson"
并使用String name = view.getTag().toString()
获取标记的名称
答案 1 :(得分:1)
无法使用ivPerson
或任何其他方法获取getId()
ID,但是您可以通过设置rahul的answer
在xml中设置标记:
android:tag="ivPerson"
在您的活动中获取
view.getTag().toString();
答案 2 :(得分:1)
您可以这样做:
for(Field field : R.id.class.getFields()) {
try {
if(field.getInt(null) == R.id.helloTV) {
Toast.makeText(this, field.getName(), Toast.LENGTH_LONG).show();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
答案 3 :(得分:1)
您可以改用getResourceName(...)
。
String fullName = getResources().getResourceName(view.getId());
但是有一些问题。此方法将为您提供完整的视图路径,例如:"com.google:id/ivPerson"
无论如何,您可以使用此技巧仅获取视图名称:
String fullName = getResources().getResourceName(view.getId());
String name = fullName.substring(fullName.lastIndexOf("/") + 1);
现在name
将恰好是"ivPerson"
答案 4 :(得分:0)
对于View v
,其名称如下:
String name = (v.getId() == View.NO_ID) ? "" :
v.getResources().getResourceName(v.getId()).split(":id/")[1];
如果视图v
没有名称,则name
是空字符串""
。
答案 5 :(得分:0)
您可以使用:
String name = ((view != null) && (view.getId() != View.NO_ID)) ? getResources().getResourceEntryName(view.getId()) : "";