我正在开发一个Android应用程序,我有两个不同的视图。这两个视图实际上都是帆布绘图(以编程方式绘制),顶部有一堆文本视图和按钮。这些按钮和文本视图的位置需要根据视图选择进行更改。我用我的绘图和按钮和文本视图创建了一个相对布局。我使用其中一个文本视图作为其他人的锚点并以编程方式更改其位置。如何删除(RelativeLayout.ALIGN_START)规则
这里是XML的一部分:
<TextView
android:layout_width="50dp"
android:layout_height="wrap_content"
android:id="@+id/tvAnchor"
android:layout_above="@id/btnCtrl"
android:layout_marginBottom="130dp"
android:textSize="15sp"
android:textColor="@color/lightGrey"
android:gravity="center"
android:text="@string/Select1"
android:background="@drawable/controls_border_not_active"
android:clickable="true"/>
<TextView
android:layout_width="50dp"
android:layout_height="wrap_content"
android:id="@+id/tvAlign"
android:layout_alignBottom="@id/tvAnchor"
android:layout_toStartOf="@id/tvAnchor"
android:layout_marginEnd="2dp"
android:textSize="15sp"
android:textColor="@color/lightGrey"
android:gravity="center"
android:text="@string/Select2"
android:background="@drawable/controls_border_not_active"
android:clickable="true"/>
在我的主,我有以下的代码来相应地改变文本视图的位置:
private void PositionControls(){
RelativeLayout.LayoutParams lopAnchor = (RelativeLayout.LayoutParams) tvAnchor.getLayoutParams();
if (isView1Selected){
lopAnchor.resolveLayoutDirection(relativeLayout.getLayoutDirection());
lopAnchor.removeRule(RelativeLayout.ALIGN_START);
lopAnchor.setMargins(0,0,0,370);
lopAnchor.addRule(RelativeLayout.CENTER_HORIZONTAL);
}else{
lopAnchor.setMargins(0,0,0,300);
lopAnchor.removeRule(RelativeLayout.CENTER_HORIZONTAL);
lopAnchor.addRule(RelativeLayout.ALIGN_START,swDoIt.getId());
}
tvAnchor.setLayoutParams(lopAnchor);
}
基本上,在视图1中, tvAnchor应该水平居中,而在另一个视图中,它应该位于偏离中心的位置 - 在“中心到右边的屏幕边缘”的中间。为了在选择第二个视图时执行此操作,我删除CENTER_HORIZONTAL规则,并添加一个规则'ALIGN_START',该规则已经位于所需的X坐标中。它工作得很好。当再次选择View 1并从View 2切换到View 1时,会出现问题。在这种情况下,我删除ALIGN_START规则并添加CENTER_HORIZONTAL。问题在于tvAnchor保持与开关对齐,就好像ALIGN_START规则未被删除一样。我试图找到布局的方向,使用requestLayout和其他可以想到的东西,但似乎没有删除该规则。