视图不会在 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>
我的 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>