簡體   English   中英

如何刪除(RelativeLayout.ALIGN_START)規則

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM