在Android中,您可以选择一个带有“id”的视图,但有没有选项可以选择更多视图(例如CSS中的“group”)?
例如,我想选择查看 和 TextView ,而不使用额外的LayoutView。
有没有Group-Tag
?或者是否有任何其他选项不止一次使用id?
<View
android:id="@+id/cardFront"
android:layout_width="300dp"
android:layout_height="407dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/image"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/string2"
/>
答案 0 :(得分:0)
您无法在单个java语句中找到多个ID。您需要为这两个视图添加一个额外的父级。要同时选择View
和TextView
,您可以将它们保存在ViewGroup
中,然后尝试按ID查找。
答案 1 :(得分:0)
<View
android:id="@+id/cardFront"
android:tag="myTag"
android:layout_width="300dp"
android:layout_height="407dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:background="@drawable/image"
/>
<TextView
android:tag="myTag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/string2"
/>
默认情况下,没有方法可以获得多个视图,但这很简单:
public List<View> findViewsById(int id) {
List<View> result = new ArrayList<>();
List<ViewGroup> groups = new ArrayList<>();
groups.add(this);
while (!groups.isEmpty()) {
ViewGroup group = groups.remove(0);
for (int i = 0; i < group.getChildCount(); i++) {
View child = group.getChildAt(i);
if (child.getId() == id)
result.add(child);
if (child instanceof ViewGroup)
groups.add((ViewGroup) child);
}
}
return result;
}
public List<View> findViewsWithTag(Object tag) {
List<View> result = new ArrayList<>();
List<ViewGroup> groups = new ArrayList<>();
groups.add(this);
while (!groups.isEmpty()) {
ViewGroup group = groups.remove(0);
for (int i = 0; i < group.getChildCount(); i++) {
View child = group.getChildAt(i);
if (tag.equals(child.getTag()))
result.add(child);
if (child instanceof ViewGroup)
groups.add((ViewGroup) child);
}
}
return result;
}