2017-05-25 56 views
1

我正在開發一個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和其他可以想到的東西,但似乎沒有刪除該規則。

回答

0

你是否檢查過有沒有啓用一些神祕值?

我在哪裏佈局

我確實添加了ALIGN_PARENT_END和刪除CENTER_IN_PARENT移動clockwidget到位的情況下,但是當我設置的佈局後,我沒能時鐘部件居中。

RelativeLayout.LayoutParams p = (RelativeLayout.LayoutParams) mTextClockWidget.getLayoutParams(); 
    p.addRule(RelativeLayout.ALIGN_PARENT_END, 1); 
    p.removeRule(RelativeLayout.CENTER_IN_PARENT); 
    mTextClockWidget.setLayoutParams(p); 

然後注意到,從什麼地方我的佈局PARAMS得到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);