8

У меня есть вид в ConstrainLayout следующим образом.Android: как программно установить layout_constraintRight_toRightOf «parent»

<TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:maxWidth="260dp" 
     android:textColor="#FFF" 
     android:textSize="16sp" 
     app:layout_constraintLeft_toLeftOf="@+id/parent" 
     app:layout_constraintTop_toBottomOf="@id/message_date" 
     android:id="@+id/text_main" 
     /> 

Я хотел бы изменить вид либо app:layout_constraintLeft_toLeftOf="@+id/parent" или layout_constraintLeft_toRightOf="@+id/parent" Programatically в recycleViewHolder на основе некоторых условий.

+0

Возможный дубликат [Добавить представление в ограничениеLayout с ограничениями, аналогичными другим дочерним] (http://stackoverflow.com/questions/39831710/add-view-to-constraintlayout-with-constraints-similar-to-another-child) – W4R10CK

+0

@ W4R10CK Я не хочу добавлять представление, я просто хочу изменить выравнивание. Можете ли вы опубликовать соответствующую часть этого ответа? – Relm

ответ

12

Вот пример установки кнопки в нижней части родительского вида с помощью кода Java:

ConstraintLayout constraintLayout; 
ConstraintSet constraintSet; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    constraintLayout = (ConstraintLayout) findViewById(R.id.activity_main_constraint_layout); 

    Button button = new Button(this); 
    button.setText("Hello"); 
    constraintLayout.addView(button); 

    constraintSet = new ConstraintSet(); 
    constraintSet.clone(constraintLayout); 

    constraintSet.connect(button.getId(), ConstraintSet.LEFT, constraintLayout.getId(), ConstraintSet.RIGHT, 0); 
    constraintSet.constrainDefaultHeight(button.getId(), 200); 
    constraintSet.applyTo(constraintLayout); 

} 

, чтобы добиться чего-то вроде этого,

app:layout_constraintLeft_toLeftOf="@+id/parent" 

ваш код Java должен выглядеть следующим образом

set.connect(YOURVIEW.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.LEFT,0); 

и для достижения чего-то подобного

layout_constraintLeft_toRightOf="@+id/parent" 

ваш код Java должен выглядеть следующим образом,

set.connect(YOURVIEW.getId(),ConstraintSet.LEFT,ConstraintSet.PARENT_ID,ConstraintSet.RIGHT,0); 

Здесь я предполагаю, что это android:id="@+id/parent" идентификатор родителя ConstraintLayout.

+0

'set.applyTo (layout);' не применяют ли эти ограничения к родительскому, а не к TextView? Должно быть? 'set.applyTo (button);' или что-то подобное? – Relm

+0

Нет набора, который знает, кому вы хотите применить изменения, теперь пришло время рассказать родительский макет, но, пожалуйста, примените эти изменения. поэтому это должно быть как set.applyTo (parent). –

+0

Ваш код не прав, сначала вам нужно добавить кнопку в макете ограничений, а затем constraintSet.clone (constraintLayout); будет сделано. В противном случае ничего не делается для кнопки –