установить правильные поля с помощью setLayoutParams не меняет моего ограниченияLayout - PullRequest
0 голосов
/ 06 мая 2019

У меня есть это расположение ограничений:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:ignore="Overdraw">

  <FrameLayout
      android:id="@+id/popover"
      style="@style/popover_style"
      android:layout_width="@dimen/width"
      android:layout_height="0dp"
      android:layout_marginBottom="@dimen/bottom_margin"
      android:layout_marginLeft="@dimen/side_margin"
      android:layout_marginRight="@dimen/side_margin"
      app:layout_constraintBottom_toBottomOf="parent"
      app:layout_constraintEnd_toEndOf="parent"
      app:layout_constraintHeight_default="wrap"
      app:layout_constraintStart_toStartOf="parent"
      app:layout_constraintVertical_bias="0">
  </FrameLayout>

</android.support.constraint.ConstraintLayout>

Я хочу изменить расположение моего popover вида с помощью кода.

иногда по центру по горизонтали.

В некоторых других случаях размер левого поля будет фиксированным.

иллюстрации: enter image description here

Я пробовал этот код, но вид всегда, кажется, центрирован по горизонтали.

Чего мне не хватает?

  private void setupPopoverPosition() {
    ConstraintSet constraintSet = new ConstraintSet();
    constraintSet.clone(rootView);
    int bottomMargin =
        getContext()
            .getResources()

            //some code

    constraintSet.applyTo(rootView);
    ConstraintLayout.LayoutParams layoutParams =
        (ConstraintLayout.LayoutParams) popover.getLayoutParams();
    layoutParams.topMargin = topMargin;
    layoutParams.bottomMargin = bottomMargin;


        layoutParams.rightMargin = popoverEndMargin;
        popover.setLayoutParams(layoutParams);


    popover.setLayoutParams(layoutParams);
    popover.requestLayout();
  }
...