Return android 中 activity 的组件 ID 列表?
Return a list of component ID's from an activity in android?
我正在整理一个小型 android 库,供其他开发人员在他们的 android 应用程序中使用。第 3 方开发人员会将我的自定义按钮添加到他们的 xml 视图中,例如 "com.example.myLibrary.CustomButton"。
开发人员可以根据需要放置任意数量的按钮。
我的库代码有没有办法识别 activity 中有多少自定义按钮,然后 return 它们的 ID 可以是应用开发者?
我已经尝试过 int[] i = getResources().getIdentifier("name","component","package");
但它 return 是一个 6 位整数,我认为它是组件的一些系统标识符,而不是它的每个实例。
注意 -- 我知道库需要应用程序的上下文 activity 通过类似 new MyLibrary(context);
的东西来传递应用程序的上下文activity。我已经为库的其他方面实现了这个,所以这似乎不是问题。
非常感谢任何有助于解决问题的建议
Android 中的 ID 是在运行时自动分配的整数,除非事先声明。每个控件的 ID 都是唯一的,但 @+id/myIdName
部分仅用于在代码中引用(想想枚举)。这些资源 ID 可以通过名称引用:
getResources().getResourceEntryName(int resid);
如果您需要一次获取所有资源 ID,还有几个其他选项。
1) 将 class 包装到一个可以为您跟踪信息的管理器中。
2) 遍历 activity
中的所有组件
//make an array list to hold the info
ArrayList<MyView> ids = new ArrayList<>();
//get the window to look through
ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
//call things recursively
findAllViews(viewGroup, ids);
private static void findAllViews(ViewGroup viewGroup,ArrayList<Integer> ids) {
for (int i = 0, n = viewGroup.getChildCount(); i < n; i++) {
View child = viewGroup.getChildAt(i);
if (child instanceof ViewGroup) {
findAllViews((ViewGroup) child, ids);
} else if (child instanceof Button) {
ids.add((Integer) child.getId());
}
}
}
我正在整理一个小型 android 库,供其他开发人员在他们的 android 应用程序中使用。第 3 方开发人员会将我的自定义按钮添加到他们的 xml 视图中,例如 "com.example.myLibrary.CustomButton"。 开发人员可以根据需要放置任意数量的按钮。
我的库代码有没有办法识别 activity 中有多少自定义按钮,然后 return 它们的 ID 可以是应用开发者?
我已经尝试过 int[] i = getResources().getIdentifier("name","component","package");
但它 return 是一个 6 位整数,我认为它是组件的一些系统标识符,而不是它的每个实例。
注意 -- 我知道库需要应用程序的上下文 activity 通过类似 new MyLibrary(context);
的东西来传递应用程序的上下文activity。我已经为库的其他方面实现了这个,所以这似乎不是问题。
非常感谢任何有助于解决问题的建议
Android 中的 ID 是在运行时自动分配的整数,除非事先声明。每个控件的 ID 都是唯一的,但 @+id/myIdName
部分仅用于在代码中引用(想想枚举)。这些资源 ID 可以通过名称引用:
getResources().getResourceEntryName(int resid);
如果您需要一次获取所有资源 ID,还有几个其他选项。
1) 将 class 包装到一个可以为您跟踪信息的管理器中。
2) 遍历 activity
中的所有组件//make an array list to hold the info
ArrayList<MyView> ids = new ArrayList<>();
//get the window to look through
ViewGroup viewGroup = (ViewGroup) getWindow().getDecorView();
//call things recursively
findAllViews(viewGroup, ids);
private static void findAllViews(ViewGroup viewGroup,ArrayList<Integer> ids) {
for (int i = 0, n = viewGroup.getChildCount(); i < n; i++) {
View child = viewGroup.getChildAt(i);
if (child instanceof ViewGroup) {
findAllViews((ViewGroup) child, ids);
} else if (child instanceof Button) {
ids.add((Integer) child.getId());
}
}
}