布局规则align_parent_end属性未显示为true

时间:2015-04-23 17:25:44

标签: android view relativelayout

在我的应用程序的某个点上,我在屏幕上的对象中循环并检查它们是否是该行中的最后一个对象。为此,我正在检查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
    }
}

谢谢!

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]并且它有效,但我坚信这两个属性会以某种方式切换。任何人都可以确认吗?或者请告诉我我搞砸的地方,这更有可能:)