[英]How to remove a (RelativeLayout.ALIGN_START) rule
我正在開發一個Android應用程序,我有兩個不同的視圖。 兩個視圖實際上都是畫布圖(以編程方式繪制),頂部有一堆文本視圖和按鈕。 需要根據視圖選擇更改這些按鈕和文本視圖的位置。 我用我的繪圖以及按鈕和文本視圖創建了一個相對布局。 我使用其中一個文本視圖作為其他人的錨點,並以編程方式更改其位置。
這是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);
}
基本上,在View1中,tvAnchor應該水平居中,而在另一個視圖中,它應該偏離中心 - 位於“中心到右邊的屏幕邊緣”的中間。 為了在選擇第二個視圖時執行此操作,我刪除了CENTER_HORIZONTAL規則,並添加了一個規則“ALIGN_START”,其中一個開關已經位於所需的X坐標中。 它工作得很好。 再次選擇View 1並從View 2切換到View 1時會出現問題。在這種情況下,我刪除ALIGN_START規則並添加CENTER_HORIZONTAL規則。 問題是tvAnchor保持與交換機對齊,就像沒有刪除ALIGN_START規則一樣。 我試圖獲得布局的方向,使用requestLayout和其他可以想到的東西,但似乎沒有刪除該規則。
您是否檢查過沒有啟用某些神秘值?
我有案例在布局中移動clockwidget的地方
我確實添加了ALIGN_PARENT_END並刪除了CENTER_IN_PARENT,但是當我設置布局時,我無法將時鍾小部件置於中心位置。
RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) mTextClockWidget.getLayoutParams();
p.addRule(RelativeLayout.ALIGN_PARENT_END, 1);
p.removeRule(RelativeLayout.CENTER_IN_PARENT);
mTextClockWidget.setLayoutParams(p);
然后注意到,從某個地方我的布局參數啟用了ALIGN_PARENT_RIGHT,當嘗試刪除ALIGN_PARENT_END並啟用CENTER_IN_PARENT時,它不起作用。 所以我不得不為ALIGN_PARENT_RIGHT添加刪除以使其工作。
RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) mTextClockWidget.getLayoutParams();
p.removeRule(RelativeLayout.ALIGN_PARENT_END);
p.removeRule(RelativeLayout.ALIGN_PARENT_RIGHT);
p.addRule(RelativeLayout.CENTER_IN_PARENT, 1);
mTextClockWidget.setLayoutParams(p);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.