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

Ale*_*nez 8 android android-view

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

<ImageView
        android:id="@+id/**ivPerson**"
        android:layout_width="80dp"
        android:layout_height="80dp"/>
Run Code Online (Sandbox Code Playgroud)

现在,在代码中我有视图(ImageView),我需要获取视图的名称 - > ivPerson.我可以通过view.getId()获取id,但这不是我需要的.

有可能的?

我试过这个:

String name = context.getResources().getResourceEntryName(view.getId());
Run Code Online (Sandbox Code Playgroud)

但不行.

Ωme*_*ega 9

View v名称如下:

String name = (v.getId() == View.NO_ID) ? "" :
    v.getResources().getResourceName(v.getId()).split(":id/")[1];
Run Code Online (Sandbox Code Playgroud)

如果视图v没有名称,则为name空字符串""


rah*_*hul 8

您可以通过将标记设置为id来实现,android:tag="ivPerson" 并使用它String name = view.getTag().toString()来获取标记的名称


Yur*_*nyi 8

你可以getResourceName(...)改用。

String fullName = getResources().getResourceName(view.getId());
Run Code Online (Sandbox Code Playgroud)

但是有一些问题。此方法将为您提供完整的视图路径,例如:"com.google:id/ivPerson"

无论如何,您可以使用此技巧来仅获取视图的名称:

String fullName = getResources().getResourceName(view.getId());
String name = fullName.substring(fullName.lastIndexOf("/") + 1);
Run Code Online (Sandbox Code Playgroud)

现在name将是"ivPerson"