视图不会在 RelativeLayout 中正确对齐(java 代码中设置的视图宽度)

views won't align right in RelativeLayout (width from view set in java code)

我的 android 应用程序有问题。我将三个视图的宽度设置为与视图上方的三个按钮相同的大小。视图是指示器并显示按下了哪个按钮。也许不是最聪明的解决方案,但我只是实习生...

The Code from my XML is:

<RelativeLayout
        android:id="@+id/statusIndicatorTop"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/status_indicator_height"
        android:background="@color/colorPrimaryDark"
        android:layout_below="@+id/toolBar"
        android:orientation="horizontal"
        android:gravity="right">

        <View
            android:id="@+id/statusPreise"
            android:layout_width="0dp"
            android:layout_height="@dimen/status_indicator_height"
            android:background="@color/colorAccent"
            android:visibility="invisible"
            android:layout_alignLeft="@id/statusShops" />

        <View
            android:id="@+id/statusShops"
            android:layout_width="0dp"
            android:layout_height="@dimen/status_indicator_height"
            android:background="@color/colorAccent"
            android:visibility="invisible"
            android:layout_alignLeft="@id/statusKategorie"/>

        <View
            android:id="@+id/statusKategorie"
            android:layout_width="0dp"
            android:layout_height="@dimen/status_indicator_height"
            android:background="@color/colorAccent"
            android:visibility="invisible"
            android:layout_alignParentRight="true" />

    </RelativeLayout>

My JAVA Code in OnCreate is:

@Override
    public void onStart() {
        super.onStart();

        fragmentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

            @Override
            public void onGlobalLayout() {

                fragmentView.getViewTreeObserver().removeGlobalOnLayoutListener(this);

                Button btnKat = (Button) fragmentView.findViewById(R.id.button_Kategorie);
                int btnKatWidth = btnKat.getWidth();
                RelativeLayout.LayoutParams paramsKat = (RelativeLayout.LayoutParams) statusKategorie.getLayoutParams();
                paramsKat.width = btnKatWidth;
                statusKategorie.setLayoutParams(paramsKat);

                Button btnShops = (Button) fragmentView.findViewById(R.id.button_Shops);
                int btnShopsWidth = btnShops.getWidth();
                RelativeLayout.LayoutParams paramsShops = (RelativeLayout.LayoutParams) statusShops.getLayoutParams();
                paramsShops.width = btnShopsWidth;
                statusShops.setLayoutParams(paramsShops);

                Button btnPreise = (Button) fragmentView.findViewById(R.id.button_Search);
                int btnPreiseWidth = btnPreise.getWidth();
                RelativeLayout.LayoutParams paramsPreise = (RelativeLayout.LayoutParams) statusSuche.getLayoutParams();
                paramsPreise.width = btnPreiseWidth;
                statusSuche.setLayoutParams(paramsPreise);
            }
        });
    }

In LOG I get this error messages:

Error:(185, 39) No resource found that matches the given name (at 'layout_alignLeft' with value '@id/statusShops').
Error:(193, 39) No resource found that matches the given name (at 'layout_alignLeft' with value '@id/statusKategorie').

当我不使用 alignLeft 时,在第一个和第二个视图中,我的应用程序正在启动,第三个指示器正在执行我想要的操作。我可以想象为什么该应用程序无法运行,但由于缺乏经验,我无法修复它。 我希望它有足够的代码来解决我的问题。

提前致谢。

试试这个 XML:

<RelativeLayout
        android:id="@+id/statusIndicatorTop"
        android:layout_width="wrap_content"
        android:layout_height="@dimen/status_indicator_height"
        android:background="@color/colorPrimaryDark"
        android:layout_below="@+id/toolBar"
        android:orientation="horizontal"
        android:gravity="right">

        <View
            android:id="@+id/statusPreise"
            android:layout_width="0dp"
            android:layout_height="@dimen/status_indicator_height"
            android:background="@color/colorAccent"
            android:visibility="invisible"
            android:layout_alignLeft="@id/statusShops" />

        <View
            android:id="@+id/statusKategorie"
            android:layout_width="0dp"
            android:layout_height="@dimen/status_indicator_height"
            android:background="@color/colorAccent"
            android:visibility="invisible"
            android:layout_alignParentRight="true" />

        <View
            android:id="@+id/statusShops"
            android:layout_width="0dp"
            android:layout_height="@dimen/status_indicator_height"
            android:background="@color/colorAccent"
            android:visibility="invisible"
            android:layout_alignLeft="@id/statusKategorie"/>

    </RelativeLayout>

顺序很重要,您不能引用尚未绘制的视图(即,如果 statusKategory 尚未绘制,您不能执行 layout_aling=@id/statusKategorie)。尝试重新排序 xml 中的声明,例如:

<RelativeLayout
    android:id="@+id/statusIndicatorTop"
    android:layout_width="wrap_content"
    android:layout_height="@dimen/status_indicator_height"
    android:background="@color/colorPrimaryDark"
    android:layout_below="@+id/toolBar"
    android:orientation="horizontal"
    android:gravity="right">

    <View
        android:id="@+id/statusKategorie"
        android:layout_width="0dp"
        android:layout_height="@dimen/status_indicator_height"
        android:background="@color/colorAccent"
        android:visibility="invisible"
        android:layout_alignParentRight="true" />
   <View
        android:id="@+id/statusShops"
        android:layout_width="0dp"
        android:layout_height="@dimen/status_indicator_height"
        android:background="@color/colorAccent"
        android:visibility="invisible"
        android:layout_alignLeft="@id/statusKategorie"/>
   <View
        android:id="@+id/statusPreise"
        android:layout_width="0dp"
        android:layout_height="@dimen/status_indicator_height"
        android:background="@color/colorAccent"
        android:visibility="invisible"
        android:layout_alignLeft="@id/statusShops" />
</RelativeLayout>