在Android中以编程方式获取视图名称

时间:2015-12-30 10:57:13

标签: android android-view

我正在做一个小型库来封装适配器功能,我需要以编程方式获取视图的名称。例如:

<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());

但不行。

6 个答案:

答案 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()) : "";