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 布局文件中)[重复]
在 Android 中将 XML 文件解组为 Java 对象?
处理略有不同的纵向和横向布局的单个 Android 布局 xml 文件?