删除以编程方式添加的RelativeLayout.END_OF

时间:2015-05-22 09:12:47

标签: android android-layout android-relativelayout

我尝试从以编程方式添加的视图布局参数中删除RelativeLayout.END_OF,但似乎只是写viewLayoutParams.removeRule(RelativeLayout.END_OF)并不起作用,我不知道#39;不知道为什么!

我尝试根据选项进行实时预览,这里是我的代码。

XML:

<RelativeLayout
    android:id="@+id/liveExample"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@+id/liveExampleLabel">

    <TextView
        android:id="@+id/iranianDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Monday, 8 Bahman 1370"
        android:textAppearance="@style/AppTheme.Text.IranianDate"
        tools:ignore="HardcodedText"/>

    <TextView
        android:id="@+id/islamicDate_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@id/iranianDate"
        android:text="@string/islamic"
        android:textAppearance="@style/AppTheme.Text.IslamicLabel"/>

    <TextView
        android:id="@+id/islamicDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="8 Rajab 1436"
        android:layout_below="@id/iranianDate"
        android:textAppearance="@style/AppTheme.Text.IslamicDate"
        tools:ignore="HardcodedText"/>
</RelativeLayout>

爪哇:

private void updateLivePreviewDatesLayout(boolean isChecked) {
RelativeLayout.LayoutParams iranianDateLayoutParams = (RelativeLayout.LayoutParams) iranianDate
        .getLayoutParams();
RelativeLayout.LayoutParams islamicDateLayoutParams = (RelativeLayout.LayoutParams) islamicDate
        .getLayoutParams();
if (isChecked) {
    iranianDateLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    islamicDateLayoutParams.addRule(RelativeLayout.CENTER_HORIZONTAL);
    islamicDateLayoutParams.setMarginStart(0);
    islamicDateLayoutParams.removeRule(RelativeLayout.END_OF);
} else {
    iranianDateLayoutParams.removeRule(RelativeLayout.CENTER_HORIZONTAL);
    islamicDateLayoutParams.removeRule(RelativeLayout.CENTER_HORIZONTAL);
    if (displayIslamicLabel.isChecked()) {
        islamicDateLayoutParams.setMarginStart(8);
        islamicDateLayoutParams.addRule(RelativeLayout.END_OF,
                R.id.islamicDate_label);
    }
}
iranianDate.setLayoutParams(iranianDateLayoutParams);
islamicDate.setLayoutParams(islamicDateLayoutParams);
}

centerHorizontal.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        editor.putBoolean("w_centerHorizontal", isChecked).apply();
        updateLivePreviewDatesLayout(isChecked);
    }
});

它首次工作(删除toEndOf布局参数),但下次不会被删除,因为我以编程方式添加了参数。

更新

我需要将layout_toEndOf布局参数添加到视图中,因为视图的默认位置与另一个视图相关,它们应该紧接在一起,之后,视图可能位于其中心布局,所以我应该删除RelativeLayout.END_OF,而是添加RelativeLayout.CENTER_HORIZONTAL参数。很高兴知道这两个参数不能一起工作,RelativeLayout.END_OF比其他参数更强大。

截图

在检查选项之前:&#34; 4 Sha&#39; ban 1436&#34;的默认位置是伊斯兰教的结束了#34;标签

Before checking the option

检查选项后:&#34; 4 Sha&#39;禁止1436&#34;未定位于中心,因为RelativeLayout.END_OF参数未正确删除且问题正确!

After checking the option

1 个答案:

答案 0 :(得分:0)

我终于找到了修复它的方法。我应该使用new RelativeLayout.LayoutParams()为每个视图创建一个新的布局参数。