Android - 如何确保小部件是该行中的最后一个?

时间:2015-04-21 18:22:13

标签: android view widget cycle

我试图将屏幕上的所有小部件导出为文本。为此,我在屏幕上的RelativeLayout中循环浏览所有小部件。如何确保我目前正在查看的视图是该行中最右边(或最后一个)?

for(int i = 0; i < relLayout.getChildCount(); i++) {
     View view = relLayout.getChildAt(i);
     (...)
}

然后我会检查我正在查看的视图是TextView,EditText,Spinner等等。到目前为止,非常好。但是为了将新行附加到字符串,我想以编程方式检查该视图是否是该行中的最后一行。是否有明确/简单的方法(除了列举那些我现在正在做的小工具的ID?:D)

提前致谢! PS1:出于问题的目的,假设代码中没有编译错误。我只是不知道如何实现这一点。

1 个答案:

答案 0 :(得分:0)

已修复,但是很奇怪。

就我而言,屏幕上的所有最后字段都标记了Align Parent End。所以我在网上找到了这样做的方法:

RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
int[] rules = params.getRules();
if ((rules[RelativeLayout.ALIGN_PARENT_END] == RelativeLayout.TRUE)) {
    // Do something about it            
}

根据http://developer.android.com/reference/android/widget/RelativeLayout.html

RelativeLayout.ALIGN_PARENT_END代表21

但是,我的代码为该检查返回false。所以我开始显示属性的值,它确实是错误的。我尝试了一段时间,然后我看到我的一个edittexts返回true。但是活动xml显示了这个

android:layout_alignParentRight="true"

除了alignParentEnd之外。根据上面的相同链接,由于alignParentRight应该是规则11,因此没有意义。 所以我设计了这个代码来公开哪些规则是真的,并把它放在我的代码中:

for(int x = 0; x < 22; x++) {
    if (rules[x] == RelativeLayout.TRUE) Log.i("Property true:", String.valueOf(x));
}

这给了我所有领域的11分,以及之前回答为TRUE的领域的11分和21分。请记住,活动xml中的所有字段都有android:layout_alignParentEnd="true"

因此,为了修复我的代码,我现在正在检查rules[RelativeLayout.ALIGN_PARENT_RIGHT]并且它有效,但我坚信这两个属性会以某种方式切换。任何人都可以确认吗?或者请告诉我我搞砸的地方,这更有可能:)