在我的应用程序的某个点上,我在屏幕上的对象中循环并检查它们是否是该行中的最后一个对象。为此,我正在检查Align Parent End属性(检查每行中的最后一个小部件)。这是我的活动xml的一部分:
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/relativeLayout">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Average Temperature:"
android:id="@+id/AverageTemperatureText"
android:layout_below="@+id/TemperaturesText"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_marginTop="10dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/AvgTempNum"
android:layout_alignBottom="@+id/AverageTemperatureText"
android:layout_toRightOf="@+id/AverageTemperatureText"
android:layout_below="@+id/TempMiddle"
android:gravity="center|bottom"
android:editable="false"
android:text="0.0"
android:maxLength="7"
android:nextFocusForward="@+id/TotalObservedVolumer"
android:layout_alignRight="@+id/FreeWaterVolume"
android:layout_alignEnd="@+id/FreeWaterVolume"
android:layout_alignParentEnd="true" />
^^^^ Right here. It's true.
你明白了。然后,在我的代码中,我循环遍历相对布局子项,然后对其中的每个视图,检查它的特定属性。如果这是真的,我应该做点什么。但是根据我的代码,它总是错误的。那么我做错了什么?这是:
RelativeLayout relLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
for(int i = 0; i < relLayout.getChildCount(); i++) {
View view = relLayout.getChildAt(i);
// Assess if it's the last field in that line
RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) view.getLayoutParams();
int[] rules = params.getRules();
if (rules[RelativeLayout.ALIGN_PARENT_END] == RelativeLayout.TRUE) {
// my code
}
}
谢谢!
答案 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]
并且它有效,但我坚信这两个属性会以某种方式切换。任何人都可以确认吗?或者请告诉我我搞砸的地方,这更有可能:)