【问题标题】:Android - How do I make sure a widget is the last in that line?Android - 如何确保小部件是该行的最后一个?
【发布时间】:2015-04-21 18:22:13
【问题描述】:

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

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

然后我正在检查我正在查看的视图是否是 TextView、EditText、Spinner 等。到目前为止,一切都很好。但是为了将新行附加到字符串中,我想以编程方式检查该视图是否是该行中的最后一个。有没有一种清晰/简单的方法可以做到这一点(除了枚举这些小部件的 id 之外,我现在正在这样做吗?:D)

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

【问题讨论】:

  • 明确的方法是停止做你正在做的事情并分离视图和模型层。由于我没有看到您的代码以及您想要实现的目标,因此无法确切说明。
  • 伊戈尔,我想我不完全明白。我同意将它们分开总是要走的路,但对我来说,这种看起来像视图操作。如果我将它们分开,这将如何帮助找出哪一个最后出现在屏幕上?
  • 一些上下文会很好,即你到底做了什么。
  • 我试图让我的程序循环屏幕上的所有对象并获取它们上面的任何文本,然后将其附加到我计划传递给共享意图的字符串中。所以假设我们有 |Name: | |查克·诺里斯| |职业: | |宇宙之主|
  • 其中 Name 和 Occupation 是 TextView 的,Chuck Norris 和 Master of the Universe 是两个 EditText 中的文本。我想循环浏览这些(我已经这样做了),并检查它的右侧是否还有另一个小部件。让我们来看第一个例子。名字是最右边的吗?不,editText 紧随其后。因此,将“名称”附加到字符串并转到下一步。这是这一行的最后一个吗?是的,Chuck Norris EditText 是该行中的最后一个小部件。所以我将附加该文本,然后在我的字符串中插入一个中断。现在转到下一行,textView "Occupation"。

标签: android view widget cycle


【解决方案1】:

已修复,但以一种奇怪的方式。

在我的例子中,屏幕上的所有最后一个字段都标记了 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            
}

其中RelativeLayout.ALIGN_PARENT_END代表21,根据http://developer.android.com/reference/android/widget/RelativeLayout.html

但是,我的代码对该检查返回 false。所以我开始显示属性的值,它真的是假的。我尝试了一段时间,然后我看到我的一个编辑文本返回了 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 的所有字段,而 11 和 21 给了之前响应 TRUE 的字段。请记住,所有字段在活动 xml 中都有 android:layout_alignParentEnd="true"

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 2012-03-09
    • 2011-04-29
    相关资源
    最近更新 更多