我试图将屏幕上的所有小部件导出为文本。为此,我在屏幕上的RelativeLayout中循环浏览所有小部件。如何确保我目前正在查看的视图是该行中最右边(或最后一个)?
for(int i = 0; i < relLayout.getChildCount(); i++) {
View view = relLayout.getChildAt(i);
(...)
}
然后我会检查我正在查看的视图是TextView,EditText,Spinner等等。到目前为止,非常好。但是为了将新行附加到字符串,我想以编程方式检查该视图是否是该行中的最后一行。是否有明确/简单的方法(除了列举那些我现在正在做的小工具的ID?:D)
提前致谢! PS1:出于问题的目的,假设代码中没有编译错误。我只是不知道如何实现这一点。
答案 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]
并且它有效,但我坚信这两个属性会以某种方式切换。任何人都可以确认吗?或者请告诉我我搞砸的地方,这更有可能:)