如何从资源ID获取资源名称

Cod*_*ife 145 android


在我的布局中,我已经定义了类似的东西.

<RadioButton
    android:id="@+id/radio1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Dnt want this text" />
Run Code Online (Sandbox Code Playgroud)

假设活动中的某些函数返回此id(radioButton的id).现在我想从这个id 得到这个文本radio1.总之,我想要检索写入的文本radio1android:id="@+id/radio1"

有人能告诉我怎么可能?

Shu*_*ayu 335

在您的活动中,试试这些:

  1. 得到字符串radio1:

    getResources().getResourceEntryName(int resid);
    
    Run Code Online (Sandbox Code Playgroud)
  2. 得到字符串com.sample.app:id/radio1:

    getResources().getResourceName(int resid);
    
    Run Code Online (Sandbox Code Playgroud)

在Kotlin Now:

val name = v.context.resources.getResourceEntryName(v.id)
Run Code Online (Sandbox Code Playgroud)

  • @JoshPinter引用说:**getResourceEntryName:**返回给定资源标识符的条目名称**getResourceName:**返回给定资源标识符的全名.此名称是"package:type/entry"形式的单个字符串,然后差异似乎在添加的*package中:type*for**getResourceName** (9认同)
  • 知道`getResourceEntryName(int resid)`和`getResourceName(int resid)`之间的区别是什么? (8认同)
  • 谢谢你回答这个问题,我花了大约一小时的时间来搜索这个问题 - 开发站点一直指向我的getString() - 这对此毫无用处. (4认同)

Ani*_*hav 9

你有ID("长"型)从您要访问单选按钮ID 编号(名称),这是收音机1.你用它

getResources().getResourceEntryName(id);
Run Code Online (Sandbox Code Playgroud)

在上面使用你可以得到单选按钮的名称,即radio1.这里参数id是你有的(长类型).试试这个它会帮助你100%.

  • 谢谢.很高兴有人实际上回答了问题,而不是通常的"为什么你需要[noob]"回应.在我迭代它们时拥有元素的名称是不可调试的.我的意思是,真的,我怎么能找到ID为354814715的TextView?(如果我没有弄错的话,在编译之间甚至不一致) - 不确定为什么OP需要它,但我需要它来验证我的字体缩放功能实际上是迭代所有子元素. (2认同)

小智 5

科特林:

val name = v.context.resources.getResourceEntryName(v.id)
Run Code Online (Sandbox Code Playgroud)

  • 也许您可以添加更多关于这解决了什么问题以及它如何解决的信息:) (2认同)