Android XML:在 XML 布局文件中将资源 ID 设置为 View 的标签

Posted

技术标签:

【中文标题】Android XML:在 XML 布局文件中将资源 ID 设置为 View 的标签【英文标题】:Android XML: Set Resource id as View's tag in XML layout file 【发布时间】:2012-08-03 12:28:36 【问题描述】:

我想在我的 android XML 布局文件中指定两个视图之间的关系。这是我想做的:

 <View
      android:id="@+id/pathview"
      android:layout_
      android:layout_ />
  ...
  <CheckBox
      android:id="@+id/viewPath"
      android:layout_
      android:layout_
      android:checked="true"
      android:paddingRight="7dp"
      android:shadowColor="#000000"
      android:shadowDx="0.5"
      android:shadowDy="0.5"
      android:shadowRadius="0.5"
      android:tag="@id/pathview"
      android:text="Paths" />

但是,XML 解析器将标记视为字符串而不将其解释为整数(System.out.println((String) [viewPath].getTag()); 打印“假”)。有什么办法可以将资源 id 分配给 View 的标签?

【问题讨论】:

***.com/questions/5100381/… 【参考方案1】:

如果你使用

android:tag="?id/pathview" 

您将得到一个字符串 id,它是一个带有问号前缀的十进制整数。我无法找到有关此行为的文档,但它似乎足够稳定。您正在做的是请求当前主题的 id。为什么生成的字符串会以“?”为前缀未知。

例如:

给定一些标识符,

public static final int test_id=0x7f080012;

在做,

android:tag="?id/test_id"

将产生一个标签值:

"?2131230738"

你可以这样做:

 View otherView = activity.findViewById(
    Integer.parseInt(
        someView.getTag().toString().substring(1)
    )
 );

当然,如果您正在编写更通用的逻辑,您需要检查标签是否为 null 并捕获 NumberFormatException。

【讨论】:

很好的答案!使用它来为图像按钮可绘制对象嵌入默认资源 ID,因此可以通过编程方式确定它们。【参考方案2】:

可以将id字符串设置为标签,然后获取id。

有些喜欢:

<View
  android:id="@+id/pathview"
  android:layout_
  android:layout_ />
...
<CheckBox
  android:id="@+id/viewPath"
  android:layout_
  android:layout_
  android:checked="true"
  android:paddingRight="7dp"
  android:shadowColor="#000000"
  android:shadowDx="0.5"
  android:shadowDy="0.5"
  android:shadowRadius="0.5"
  android:tag="pathview"
  android:text="Paths" />

然后在你的代码中:

CheckBox viewPath = findViewById(R.id.pathview);
String pathViewStrId = (String) viewPath.getTag();
int patViewId = getResources().getIdentifier(pathViewStrId, "id", getPackageName());
View pathView = findViewById(patViewId);

【讨论】:

以上是关于Android XML:在 XML 布局文件中将资源 ID 设置为 View 的标签的主要内容,如果未能解决你的问题,请参考以下文章

删除 ListView 分隔符(在 xml 布局文件中)[重复]

在布局 XML 中编辑 android:tag

在 Android 中将 XML 文件解组为 Java 对象?

处理略有不同的纵向和横向布局的单个 Android 布局 xml 文件?

如何在 android 的 setContentView 中将自定义布局设置为主视图

Android布局xml文件中TextView的首字母大写