Android Kotlin ustawianie wysokości FrameLayout programatically nie działa

0

Próbuję w ten sposób:

       fragment_container.layoutParams.height = 100
        fragment_container.requestLayout()

oraz w ten:

        val params = fragment_container.layoutParams
        params.height = 100
        fragment_container.layoutParams = params
        fragment_container.requestLayout()

żaden z nich nie działa. Wysokość tego fragment_container (to FrameLayout) jest wciąż taka sama jak zadeklarowana w layout.xml

W razie W zamieszczam też layout.xml:

<?xml version="1.0" encoding="utf-8"?>
<pl.jawegiel.exchangerates.ClickableMotionLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:motion="http://schemas.android.com/apk/res-auto"
    android:id="@+id/motion_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    motion:layoutDescription="@xml/main_activity_scene">

    <ImageView
        android:id="@+id/iv_header"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:src="@mipmap/exchange_rates"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toTopOf="parent"/>

    <LinearLayout
        android:id="@+id/ll_toolbar"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/teal_700"
        android:gravity="center_vertical"
        android:orientation="horizontal"
        android:padding="8dp"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintStart_toStartOf="parent"
        motion:layout_constraintTop_toBottomOf="@+id/iv_header">

        <RelativeLayout
            android:id="@+id/rl_inside_toolbar"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content">

            <TextView
                android:id="@+id/toolbar_title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/app_name"
                android:textSize="20sp"
                android:textStyle="bold" />

            <TextView
                android:id="@+id/toolbar_subtitle"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/toolbar_title"
                android:textSize="12sp"
                android:textStyle="bold" />
        </RelativeLayout>
    </LinearLayout>

    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="400dp"/>

    <TextView
        android:id="@+id/about"
        android:layout_width="wrap_content"
        android:layout_height="?attr/actionBarSize"
        android:gravity="center_vertical"
        android:text="@string/about"
        android:layout_marginEnd="10dp"
        android:textSize="18sp"
        android:visibility="visible"
        motion:layout_constraintEnd_toEndOf="parent"
        motion:layout_constraintTop_toTopOf="parent" />
</pl.jawegiel.exchangerates.ClickableMotionLayout>

Z góry dziękuję! :)

1

Jeśli robisz to z poziomu fragmentu, to dopiero po onViewCreated(...)

Druga sprawa, to czy czasem nie musisz tego zrzutować na LayoutParams FrameLayoutu (nie wiem na czym oparty jest ten ClickableMotionLayout który jest tutaj rodzicem i może mieszać w strukturze paramsów swoich podwidgetów - może to rzucić wyjątkiem więc potraktuj to jako punkt zaczepienia do dalszego szukania).

Z ciekawości, wrzuć sobie ten sprawdzany widok w xml do ll_toolbar który jest linearLayout i sprawdź czy ten sam kod zadziała. Jak tak, to masz winowajcę w postaci ClickableMotionLayout i to, że prawdopodobnie będziesz musiał zrzutować LayoutParams na typ obsługiwany przez FrameLayout.

0

Ja bym strzelał że to jednak kwestia tego że ten ClickableMotionLayout jest Motion layoutem, który przejmuję kontrolę nad wszystkimi aspektami danego widoku ( kolory, etc) więc pewnie i layout paramsy też.

Jezeli już korzystasz z MotionLayout, to stwórz sobie w nim stan w którym ten twój fragment container ma 100 ( co przy okazji jest też zonkiem, 100 czego ? , może jednak w depsach to podasz) i wywołaj po prostu transitionToState na nim :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1